1925 lines
85 KiB
C
1925 lines
85 KiB
C
|
||
#include <string.h>
|
||
|
||
#include "hy_protocol.h"
|
||
#include "pDebug.h"
|
||
#include "comm_types.h"
|
||
#include "parameter.h"
|
||
#include "cfg_protocol.h"
|
||
#include "inFlash.h"
|
||
#include "bl_chargControl.h"
|
||
#include "bl_comm.h"
|
||
#include "chargControlTypes.h"
|
||
#include "FM_RTC.h"
|
||
#include "interruptSend.h"
|
||
|
||
|
||
// #include "RingQueue.h"
|
||
|
||
// 声明 beginHYconfigMode 函数
|
||
extern void beginHYconfigMode(void);
|
||
|
||
static BOOL HYconfigModeState = FALSE;
|
||
|
||
/* 功能码 */
|
||
typedef enum
|
||
{
|
||
HY_batteryStatus = 0x60, /* 电池状态数据报 */
|
||
HY_electricityStatistics = 0x61, /* 电量统计数据报 */
|
||
HY_sensorNumberConfiguration = 0x62, /* 传感器号码配置 */
|
||
HY_sensorNumberInquiry = 0x63, /* 传感器号码查询 */
|
||
HY_chargingThresholdVoltageConfiguration = 0x64, /* 充电阈值电压配置 */
|
||
HY_chargingRangeVoltageQuery = 0x65, /* 充电域值电压查询 */
|
||
HY_resetInstruction = 0x66, /* 复位指令 */
|
||
|
||
HY_chargingControlConfiguration = 0x6C, /* 充电控制配置 */
|
||
HY_chargingControlQuery = 0x6D, /* 充电控制查询 */
|
||
HY_configurationTime = 0x6E, /* 配置时间 */
|
||
HY_queryTime = 0x6F, /* 查询时间 */
|
||
|
||
HY_configureProtocolType = 0x70, /* 配置协议类型 */
|
||
HY_responseConfigureProtocolType = 0x71, /* 响应配置协议类型 */
|
||
|
||
HY_queryControlBoxConfiguration = 0x74, /* 查询电池控制盒当前配置 */
|
||
HY_querySoftwareVersion = 0x75, /* 查询电池控制盒软件版本 */
|
||
HY_enterConfigurationMode = 0x76, /* 进入配置模式 */
|
||
|
||
HY_configureHardwareID = 0x7B, /* 配置控制盒硬件ID号 */
|
||
HY_hardwareID_communicationIDQuery = 0x7C, /* 控制盒硬件ID号及通信ID号(原传感器号)查询 */
|
||
HY_modifyCommunicationID = 0x7D, /* 修改通信ID号(原传感器号) */
|
||
HY_checkMotherboardTemperature = 0x7E, /* 查询主板温度值 */
|
||
|
||
}HY_MsgFunctionCode;
|
||
|
||
|
||
/* 解析数据包的长度 */
|
||
typedef enum
|
||
{
|
||
HY_analyzeStartFlag = 1, /* 长度为1时解析起始标志 */
|
||
HY_analyzeHardwareID = 7, /* 长度为7时解析硬件ID */
|
||
HY_analyzeCommunicationID = 11, /* 长度为10时解析通信ID */
|
||
HY_analyzeControlWord = 12, /* 长度为12时解析控制字 */
|
||
HY_analyzeDataLen = 14, /* 长度为14时解析数据长度 */
|
||
|
||
}HY_AnalyzeDataLen;
|
||
|
||
/* 执行状态 */
|
||
typedef enum
|
||
{
|
||
/* 返回状态 */
|
||
HY_success = 0xFF, /* 成功 */
|
||
HY_fail = 0x00, /* 失败 */
|
||
|
||
/* 返回状态 */
|
||
HY_success1 = 0x01, /* 成功 */
|
||
|
||
/* 充电开关状态 */
|
||
HY_switchON = 0x01, /* 打开 */
|
||
HY_switchOFF = 0x00, /* 关闭 */
|
||
|
||
/* 控制开关状态 */
|
||
HY_cSwitchON = 0x00, /* 打开 */
|
||
HY_cSwitchOFF = 0x01, /* 关闭 */
|
||
|
||
}HY_state;
|
||
|
||
|
||
/* 指定对齐方式为1字节 */
|
||
#pragma pack(push,1)
|
||
|
||
/* 通用参数 */
|
||
typedef struct _HY_Recv_pack{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
}HY_Recv_pack;
|
||
|
||
/* 功能码处理函数 */
|
||
typedef void (*HYMsgProcFunc)(device_handle device, void*, uint32_t MsgLen);
|
||
typedef struct _HY_FunctionMsgProcTable{
|
||
u_int32_t msgId;
|
||
HYMsgProcFunc pMsgProc;
|
||
}HY_FuncionMsgProcTable;
|
||
|
||
|
||
/* 电池状态数据报查询 */
|
||
typedef struct _HY_batteryStatusQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_batteryStatusQuery;
|
||
#define HY_batteryStatusQuery_PACK_SIZE (sizeof(HY_batteryStatusQuery))
|
||
|
||
/* 电池状态数据报响应 */
|
||
typedef struct _HY_batteryStatusResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
float_t batteryVoltage; /* 电池电压 */
|
||
float_t dischargCurrent; /* 输出电流(流向负载) */
|
||
float_t chargCurrent1; /* 充电电流(流向电池+负载) */
|
||
float_t SOC; /* 剩余电量 */
|
||
float_t openCircuitVoltage1; /* 充电开路电压 */
|
||
uint8_t chargSwitchStatus1; /* 充电开关状态 */
|
||
float_t chargCurrent2; /* 充电电流(流向电池+负载) */
|
||
float_t openCircuitVoltage2; /* 充电开路电压 */
|
||
uint8_t chargSwitchStatus2; /* 充电开关状态 */
|
||
float_t Mos_Temperature; /* 工作温度 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_batteryStatusResponse;
|
||
#define HY_batteryStatusResponse_PACK_SIZE (sizeof(HY_batteryStatusResponse))
|
||
#define HY_batteryStatusResponse_dataLen 38
|
||
|
||
/* 电量统计数据报查询 */
|
||
typedef struct _HY_electricityStatisticsQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_electricityStatisticsQuery;
|
||
#define HY_electricityStatisticsQuery_PACK_SIZE (sizeof(HY_electricityStatisticsQuery))
|
||
|
||
/* 电量统计数据报响应 */
|
||
typedef struct _HY_electricityStatisticsResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t statisticalDuration; /* 统计时长 */
|
||
float_t totalElectricityConsumption; /* 总电量消耗 */
|
||
float_t totalChargCapacity; /* 总充电电量 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_electricityStatisticsResponse;
|
||
#define HY_electricityStatisticsResponse_PACK_SIZE (sizeof(HY_electricityStatisticsResponse))
|
||
#define HY_electricityStatisticsResponse_dataLen 16
|
||
|
||
/* 传感器号码配置 */
|
||
typedef struct _HY_sensorNumberConfig{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t newHardwareID[6]; /* 新硬件ID;高字节在前,低字节在后(保持不变) */
|
||
uint8_t newCommunicationID[4]; /* 新通信ID;高字节在前,低字节在后 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_sensorNumberConfig;
|
||
#define HY_sensorNumberConfiguration_PACK_SIZE (sizeof(HY_sensorNumberConfig))
|
||
|
||
/* 传感器号码配置响应 */
|
||
typedef struct _HY_sensorNumberConfigurationResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_sensorNumberConfigurationResponse;
|
||
#define HY_sensorNumberConfigurationResponse_PACK_SIZE (sizeof(HY_sensorNumberConfigurationResponse))
|
||
#define HY_sensorNumberConfigurationResponse_dataLen 5
|
||
|
||
/* 传感器号码查询 */
|
||
typedef struct _HY_sensorNumberInquiryQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t broadcastTerminal[6]; /* 广播终端ID:0xFF 0xFF 0xFF 0xFF 0xFF 0xFF */
|
||
uint8_t broadcastCommunication[4]; /* 广播通信ID:0xFF 0xFF 0xFF 0xFF */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_sensorNumberInquiryQuery;
|
||
#define HY_sensorNumberInquiryQuery_PACK_SIZE (sizeof(HY_sensorNumberInquiryQuery))
|
||
|
||
/* 传感器号码查询响应 */
|
||
typedef struct _HY_sensorNumberInquiryResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t hardwareIDR[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationIDR[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_sensorNumberInquiryResponse;
|
||
#define HY_sensorNumberInquiryResponse_PACK_SIZE (sizeof(HY_sensorNumberInquiryResponse))
|
||
#define HY_sensorNumberInquiryResponse_dataLen 14
|
||
|
||
/* 充电阈值电压配置 */
|
||
typedef struct _HY_chargingThresholdVoltageConfig{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
float_t chargOpenVoltage; /* 充电开电池电压 */
|
||
float_t chargCloseVoltage; /* 充电关电池电压 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_chargingThresholdVoltageConfig;
|
||
#define HY_chargingThresholdVoltageConfig_PACK_SIZE (sizeof(HY_chargingThresholdVoltageConfig))
|
||
|
||
/* 充电阈值电压配置响应 */
|
||
typedef struct _HY_chargingThresholdVoltageConfigResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_chargingThresholdVoltageConfigResponse;
|
||
#define HY_chargingThresholdVoltageConfigResponse_PACK_SIZE (sizeof(HY_chargingThresholdVoltageConfigResponse))
|
||
|
||
|
||
/* 充电域值电压查询 */
|
||
typedef struct _HY_chargRangeVoltageQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_chargRangeVoltageQuery;
|
||
#define HY_chargRangeVoltageQuery_PACK_SIZE (sizeof(HY_chargRangeVoltageQuery))
|
||
|
||
/* 充电域值电压查询响应 */
|
||
typedef struct _HY_chargRangeVoltageQueryResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
float_t chargOpenVoltage; /* 充电开电池电压 */
|
||
float_t chargCloseVoltage; /* 充电关电池电压 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_chargRangeVoltageQueryResponse;
|
||
#define HY_chargRangeVoltageQueryResponse_PACK_SIZE (sizeof(HY_chargRangeVoltageQueryResponse))
|
||
|
||
/* 复位指令 */
|
||
typedef struct _HY_resetInstructionQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_resetInstructionQuery;
|
||
#define HY_resetInstructionQuery_PACK_SIZE (sizeof(HY_resetInstructionQuery))
|
||
|
||
/* 复位指令响应 */
|
||
typedef struct _HY_resetInstructionResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_resetInstructionResponse;
|
||
#define HY_resetInstructionResponse_PACK_SIZE (sizeof(HY_resetInstructionResponse))
|
||
#define HY_resetInstructionResponse_dataLen 5
|
||
|
||
/* 充电控制配置 */
|
||
typedef struct _HY_chargingControlConfig{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t chargInterface; /* 充电接口 */
|
||
uint8_t chargInterfaceControl; /* 充电接口控制 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_chargingControlConfig;
|
||
#define HY_chargingControlConfig_PACK_SIZE (sizeof(HY_chargingControlConfig))
|
||
|
||
/* 充电控制配置响应 */
|
||
typedef struct _HY_chargingControlConfigResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_chargingControlConfigResponse;
|
||
#define HY_chargingControlConfigResponse_PACK_SIZE (sizeof(HY_chargingControlConfigResponse))
|
||
#define HY_chargingControlConfigResponse_dataLen 5
|
||
|
||
/* 充电控制查询 */
|
||
typedef struct _HY_QueryChargingControl{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_QueryChargingControl;
|
||
#define HY_QueryChargingControl_PACK_SIZE (sizeof(HY_QueryChargingControl))
|
||
|
||
/* 充电控制查询响应 */
|
||
typedef struct _HY_QueryChargingControlResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t chargInterface1; /* 充电接口1状态 */
|
||
uint8_t chargInterface2; /* 充电接口2状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_QueryChargingControlResponse;
|
||
#define HY_QueryChargingControlResponse_PACK_SIZE (sizeof(HY_QueryChargingControlResponse))
|
||
#define HY_QueryChargingControlResponse_dataLen 6
|
||
|
||
/* 配置协议类型 */
|
||
typedef struct _HY_configProtocolType{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t protocolType; /* 协议类型; 0x01表示:汇源协议(波特率9600) 0x02表示:南瑞协议(波特率115200)*/
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_configProtocolType;
|
||
#define HY_configProtocolType_PACK_SIZE (sizeof(HY_configProtocolType))
|
||
|
||
/* 配置协议类型响应 */
|
||
typedef struct _HY_configProtocolTypeResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_configProtocolTypeResponse;
|
||
#define HY_configProtocolTypeResponse_PACK_SIZE (sizeof(HY_configProtocolTypeResponse))
|
||
#define HY_configProtocolTypeResponse_dataLen 5
|
||
|
||
/* 查询电池控制盒当前配置 */
|
||
typedef struct _HY_queryControlBoxConfigurationQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_queryControlBoxConfigurationQuery;
|
||
#define HY_queryControlBoxConfigurationQuery_PACK_SIZE (sizeof(HY_queryControlBoxConfigurationQuery))
|
||
|
||
/* 查询电池控制盒当前配置响应 */
|
||
typedef struct _HY_queryControlBoxConfigurationResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t protocolType; /* 协议类型; 0x01表示:汇源协议(波特率9600) 0x02表示:南瑞协议(波特率115200)*/
|
||
uint8_t voltageLevel; /* 电压等级 */
|
||
uint8_t mainBoardTemperatureSensorType; /* 主板温度传感器类型 */
|
||
uint8_t batteryTemperatureSensorType; /* 电池温度传感器类型 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_queryControlBoxConfigurationResponse;
|
||
#define HY_queryControlBoxConfigurationResponse_PACK_SIZE (sizeof(HY_queryControlBoxConfigurationResponse))
|
||
#define HY_queryControlBoxConfigurationResponse_dataLen 8
|
||
|
||
/* 查询电池控制盒软件版本 */
|
||
typedef struct _HY_SoftwareVersionQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_SoftwareVersionQuery;
|
||
#define HY_SoftwareVersionQuery_PACK_SIZE (sizeof(HY_SoftwareVersionQuery))
|
||
|
||
/* 查询电池控制盒软件版本响应 */
|
||
typedef struct _HY_SoftwareVersionQueryResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t versionInformation[13]; /* 版本信息 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_SoftwareVersionQueryResponse;
|
||
#define HY_SoftwareVersionQueryResponse_PACK_SIZE (sizeof(HY_SoftwareVersionQueryResponse))
|
||
#define HY_SoftwareVersionQueryResponse_dataLen 17
|
||
|
||
/* 进入配置模式 */
|
||
typedef struct _HY_enterConfigMode{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_enterConfigMode;
|
||
#define HY_enterConfigMode_PACK_SIZE (sizeof(HY_enterConfigMode))
|
||
|
||
/* 进入配置模式响应 */
|
||
typedef struct _HY_enterConfigModeResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_enterConfigModeResponse;
|
||
#define HY_enterConfigModeResponse_PACK_SIZE (sizeof(HY_enterConfigModeResponse))
|
||
#define HY_enterConfigModeResponse_dataLen 5
|
||
|
||
/* 配置控制盒硬件ID号 */
|
||
typedef struct _HY_configHardwareID{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t newHardwareID[6]; /* 新硬件ID;高字节在前,低字节在后 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_configHardwareID;
|
||
#define HY_configHardwareID_PACK_SIZE (sizeof(HY_configHardwareID))
|
||
|
||
/* 配置控制盒硬件ID号 响应*/
|
||
typedef struct _HY_configHardwareIDResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_configHardwareIDResponse;
|
||
#define HY_configHardwareIDResponse_PACK_SIZE (sizeof(HY_configHardwareIDResponse))
|
||
#define HY_configHardwareIDResponse_dataLen 5
|
||
|
||
/* 控制盒硬件ID号及通信ID号(原传感器号)查询 */
|
||
typedef struct _HY_QueryhardwareID_communicationID{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_QueryhardwareID_communicationID;
|
||
#define HY_QueryhardwareID_communicationID_PACK_SIZE (sizeof(HY_QueryhardwareID_communicationID))
|
||
|
||
/* 控制盒硬件ID号及通信ID号(原传感器号)查询响应 */
|
||
typedef struct _HY_QueryhardwareID_communicationIDResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t hardwareIDR[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationIDR[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_QueryhardwareID_communicationIDResponse;
|
||
#define HY_QueryhardwareID_communicationIDResponse_PACK_SIZE (sizeof(HY_QueryhardwareID_communicationIDResponse))
|
||
#define HY_QueryhardwareID_dataLen 14
|
||
|
||
/* 修改通信ID号(原传感器号) */
|
||
typedef struct _HY_modifyCommunicationIDChange{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t newHardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t newCommunicationID[4]; /* 新通信ID;高字节在前,低字节在后 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_modifyCommunicationIDChange;
|
||
#define HY_modifyCommunicationIDChange_PACK_SIZE (sizeof(HY_modifyCommunicationIDChange))
|
||
|
||
/* 修改通信ID号(原传感器号)响应 */
|
||
typedef struct _HY_modifyCommunicationIDChangeResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_modifyCommunicationIDChangeResponse;
|
||
#define HY_modifyCommunicationIDChangeResponse_PACK_SIZE (sizeof(HY_modifyCommunicationIDChangeResponse))
|
||
#define HY_modifyCommunicationIDChangeResponse_dataLen 5
|
||
|
||
/* 查询主板温度值 */
|
||
typedef struct _HY_checkMotherboardTemperatureQuery{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_checkMotherboardTemperatureQuery;
|
||
#define HY_checkMotherboardTemperatureQuery_PACK_SIZE (sizeof(HY_checkMotherboardTemperatureQuery))
|
||
|
||
/* 查询主板温度值响应 */
|
||
typedef struct _HY_checkMotherboardTemperatureResponse{
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
float_t MotherboardTemperature; /* 主板温度 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_checkMotherboardTemperatureResponse;
|
||
#define HY_checkMotherboardTemperatureResponse_PACK_SIZE (sizeof(HY_checkMotherboardTemperatureResponse))
|
||
#define HY_checkMotherboardTemperatureResponse_dataLen 8
|
||
|
||
/* 配置时间 */
|
||
typedef struct _HY_configTime {
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
timeInfo time; /* 年月日时分秒 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_configTime;
|
||
#define HY_configTime_PACK_SIZE (sizeof(HY_configTime))
|
||
|
||
/* 配置时间响应 */
|
||
typedef struct _HY_configTimeResponse {
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint8_t state; /* 状态 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_configTimeResponse;
|
||
#define HY_configTimeResponse_PACK_SIZE (sizeof(HY_configTimeResponse))
|
||
#define HY_configTimeResponse_dataLen 5
|
||
|
||
/* 查询时间 */
|
||
typedef struct _HY_timeQuery {
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_timeQuery;
|
||
#define HY_timeQuery_PACK_SIZE (sizeof(HY_timeQuery))
|
||
|
||
/* 查询时间响应 */
|
||
typedef struct _HY_queryTimeResponse {
|
||
uint8_t start_Flag; /* 起始标志 */
|
||
uint8_t hardwareID[6]; /* 硬件ID;高字节在前,低字节在后 */
|
||
uint8_t communicationID[4]; /* 通信ID;高字节在前,低字节在后 */
|
||
uint8_t controlWord; /* 控制字 */
|
||
uint8_t dataLen[2]; /* 数据长度;高字节在前,低字节在后 */
|
||
timeInfo time; /* 年月日时分秒 */
|
||
uint32_t frameNumber; /* 帧序号 */
|
||
uint8_t check_Bit; /* 校验码 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}HY_queryTimeResponse;
|
||
#define HY_queryTimeResponse_PACK_SIZE (sizeof(HY_queryTimeResponse))
|
||
#define HY_queryTimeResponse_dataLen 10
|
||
|
||
|
||
/* 恢复默认的对齐设置 */
|
||
#pragma pack(pop)
|
||
|
||
|
||
/**
|
||
* @brief 校验算法
|
||
* @param 采用累加和取反的校验方式,将终端号码、传感器号码、控制字、数据长度
|
||
* 和数据区的所有字节进行算术累加,抛弃高位,只保留最后单字节,将单字节取反;
|
||
* @retval
|
||
*/
|
||
static uint8_t HY_CheckFunc(uint8_t *arr_buff, uint8_t len)
|
||
{
|
||
uint8_t temp = 0x00;
|
||
uint32_t sum = 0x00;
|
||
|
||
for(uint8_t i = 0; i < len; i++) {
|
||
sum += *arr_buff++;
|
||
}
|
||
|
||
temp = (~sum) & 0xff;
|
||
|
||
return temp;
|
||
}
|
||
|
||
|
||
/* 电池状态数据报 */
|
||
static void HY_MsgProcFunc_batteryStatus(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 电量统计数据报 */
|
||
static void HY_MsgProcFunc_electricityStatistics(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 传感器号码配置 */
|
||
static void HY_MsgProcFunc_sensorNumberConfiguration(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 传感器号码查询 */
|
||
static void HY_MsgProcFunc_sensorNumberInquiry(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 充电阈值电压配置 */
|
||
static void HY_MsgProcFunc_chargingThresholdVoltageConfiguration(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 充电域值电压查询 */
|
||
static void HY_MsgProcFunc_chargingRangeVoltageQuery(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 复位指令 */
|
||
static void HY_MsgProcFunc_resetInstruction(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
|
||
/* 充电控制配置 */
|
||
static void HY_MsgProcFunc_chargingControlConfiguration(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 充电控制查询 */
|
||
static void HY_MsgProcFunc_chargingControlQuery(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 配置时间 */
|
||
static void HY_MsgProcFunc_configTime(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 查询时间 */
|
||
static void HY_MsgProcFunc_queryTime(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
|
||
|
||
/* 配置协议类型 */
|
||
static void HY_MsgProcFunc_configureProtocolType(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
///* 响应配置协议类型 */
|
||
//static void HY_MsgProcFunc_batteryStatus(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
|
||
/* 查询电池控制盒当前配置 */
|
||
static void HY_MsgProcFunc_queryControlBoxConfiguration(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 查询电池控制盒软件版本 */
|
||
static void HY_MsgProcFunc_querySoftwareVersion(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 进入配置模式 */
|
||
static void HY_MsgProcFunc_enterConfigurationMode(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
|
||
/* 配置控制盒硬件ID号 */
|
||
static void HY_MsgProcFunc_configureHardwareID(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 控制盒硬件ID号及通信ID号(原传感器号)查询 */
|
||
static void HY_MsgProcFunc_hardwareID_communicationIDQuery(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 修改通信ID号(原传感器号) */
|
||
static void HY_MsgProcFunc_modifyCommunicationID(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
/* 查询主板温度值 */
|
||
static void HY_MsgProcFunc_checkMotherboardTemperature(device_handle device, void *pMsg, uint32_t MsgLen);
|
||
|
||
/* 功能码处理表 */
|
||
HY_FuncionMsgProcTable g_hyMsgTbl[] =
|
||
{
|
||
{HY_batteryStatus, HY_MsgProcFunc_batteryStatus},
|
||
{HY_electricityStatistics, HY_MsgProcFunc_electricityStatistics},
|
||
{HY_sensorNumberConfiguration, HY_MsgProcFunc_sensorNumberConfiguration},
|
||
{HY_sensorNumberInquiry, HY_MsgProcFunc_sensorNumberInquiry},
|
||
{HY_chargingThresholdVoltageConfiguration, HY_MsgProcFunc_chargingThresholdVoltageConfiguration},
|
||
{HY_chargingRangeVoltageQuery, HY_MsgProcFunc_chargingRangeVoltageQuery},
|
||
{HY_resetInstruction, HY_MsgProcFunc_resetInstruction},
|
||
{HY_chargingControlConfiguration, HY_MsgProcFunc_chargingControlConfiguration},
|
||
{HY_chargingControlQuery, HY_MsgProcFunc_chargingControlQuery},
|
||
{HY_configureProtocolType, HY_MsgProcFunc_configureProtocolType},
|
||
// {HY_responseConfigureProtocolType, HY_MsgProcFunc_batteryStatus},
|
||
{HY_queryControlBoxConfiguration, HY_MsgProcFunc_queryControlBoxConfiguration},
|
||
{HY_querySoftwareVersion, HY_MsgProcFunc_querySoftwareVersion},
|
||
{HY_enterConfigurationMode, HY_MsgProcFunc_enterConfigurationMode},
|
||
{HY_configureHardwareID, HY_MsgProcFunc_configureHardwareID},
|
||
{HY_hardwareID_communicationIDQuery, HY_MsgProcFunc_hardwareID_communicationIDQuery},
|
||
{HY_modifyCommunicationID, HY_MsgProcFunc_modifyCommunicationID},
|
||
{HY_checkMotherboardTemperature, HY_MsgProcFunc_checkMotherboardTemperature},
|
||
{HY_configurationTime, HY_MsgProcFunc_configTime},
|
||
{HY_queryTime, HY_MsgProcFunc_queryTime},
|
||
};
|
||
|
||
|
||
|
||
/**
|
||
* @brief 读取HY协议配置状态
|
||
* @param None
|
||
* @retval TRUE 能修改配置
|
||
* FALSE 不能修改配置
|
||
*/
|
||
BOOL getHYconfigModeState(void)
|
||
{
|
||
return HYconfigModeState;
|
||
}
|
||
|
||
/**
|
||
* @brief 匹配广播ID
|
||
* @param address 地址
|
||
* @retval 1 匹配成功
|
||
* 0 匹配失败
|
||
*/
|
||
void setHYconfigModeState(BOOL state)
|
||
{
|
||
if (state == TRUE || state == FALSE) {
|
||
HYconfigModeState = state;
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* @brief 匹配广播ID
|
||
* @param address 地址
|
||
* @retval 1 匹配成功
|
||
* 0 匹配失败
|
||
*/
|
||
static int Match_BroadcastCommunicationID(u_int8_t communicationID[4])
|
||
{
|
||
if (communicationID[0] == 0xFF && \
|
||
communicationID[1] == 0xFF && \
|
||
communicationID[2] == 0xFF && \
|
||
communicationID[3] == 0xFF) {
|
||
// log_info("Match_BroadcastCommunicationID success\r\n");
|
||
return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* @brief 匹配设备通信ID
|
||
* @param address 地址
|
||
* @retval 1 匹配成功
|
||
* 0 匹配失败
|
||
*/
|
||
static int HY_matchCommunicationID(u_int8_t communicationID[4])
|
||
{
|
||
if ((communicationID[0] == g_cfgParameter.communicationID[0]) && \
|
||
(communicationID[1] == g_cfgParameter.communicationID[1]) && \
|
||
(communicationID[2] == g_cfgParameter.communicationID[2]) && \
|
||
(communicationID[3] == g_cfgParameter.communicationID[3])) {
|
||
// log_info("Match_CommunicationIDHY success \r\n");
|
||
return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
/**
|
||
* @brief 匹配设备硬件ID
|
||
* @param address 地址
|
||
* @retval 1 匹配成功
|
||
* 0 匹配失败
|
||
*/
|
||
static int HY_matchHardwareID(u_int8_t hardwareID[6])
|
||
{
|
||
if ((hardwareID[0] == g_cfgParameter.hardwareID[0]) && \
|
||
(hardwareID[1] == g_cfgParameter.hardwareID[1]) && \
|
||
(hardwareID[2] == g_cfgParameter.hardwareID[2]) && \
|
||
(hardwareID[3] == g_cfgParameter.hardwareID[3]) && \
|
||
(hardwareID[4] == g_cfgParameter.hardwareID[4]) && \
|
||
(hardwareID[5] == g_cfgParameter.hardwareID[5])) {
|
||
// log_info("Match_hardwareIDHY success \r\n");
|
||
return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* @brief 匹配广播硬件ID
|
||
* @param address 地址
|
||
* @retval 1 匹配成功
|
||
* 0 匹配失败
|
||
*/
|
||
static int Match_BroadcastHardwareID(u_int8_t hardwareID[6])
|
||
{
|
||
if (hardwareID[0] == 0xFF && \
|
||
hardwareID[1] == 0xFF && \
|
||
hardwareID[2] == 0xFF && \
|
||
hardwareID[3] == 0xFF && \
|
||
hardwareID[4] == 0xFF && \
|
||
hardwareID[5] == 0xFF) {
|
||
// log_info("Match_BroadcastHardwareID success\r\n");
|
||
return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* @brief 读取串口数据
|
||
* @param uart_handle 串口句柄
|
||
* @param buff 缓冲区
|
||
* @param buff_size 缓冲区长度
|
||
* @retval
|
||
*/
|
||
static int HY_uart_read_climate_pack(device_handle uart_handle,uint8_t *buff, uint32_t buff_size)
|
||
{
|
||
uint32_t offset = 0;
|
||
uint32_t len = 0;
|
||
uint8_t flag_run = 0;
|
||
|
||
/* 接收到的硬件ID种类
|
||
* 0x01 广播ID
|
||
* 0x02 硬件ID
|
||
**/
|
||
uint8_t hardwordIDType = 0;
|
||
uint8_t c = 0;
|
||
|
||
HY_Recv_pack *pack = (HY_Recv_pack *)buff;
|
||
|
||
buff_size--; //预留一个'\0'位置
|
||
for (; offset < buff_size;){
|
||
if (uart_dev_char_present(uart_handle) == 0) {
|
||
break;
|
||
}
|
||
|
||
c = uart_dev_in_char(uart_handle);
|
||
|
||
buff[offset++] = c;
|
||
inConfigBuff(c);
|
||
|
||
/* 匹配起始标志位 */
|
||
if (offset == HY_analyzeStartFlag || (flag_run > 0)) {
|
||
if (pack->start_Flag != g_cfgParameter.startFlagHY) {
|
||
// log_info(" Match_start_Flag error %x ", pack->start_Flag);
|
||
// printf("1 : %x \n", pack->start_Flag);
|
||
memcpy(buff, buff+1, offset-1);
|
||
offset--;
|
||
continue;
|
||
}
|
||
// log_info(" Match_start_Flag success ");
|
||
// printf("%x\n", pack->start_Flag);
|
||
}
|
||
|
||
/* 匹配硬件ID */
|
||
if (offset == HY_analyzeHardwareID || (flag_run > 1)) {
|
||
if (HY_matchHardwareID(pack->hardwareID)) {
|
||
hardwordIDType = 0x02;
|
||
}
|
||
|
||
else if (Match_BroadcastHardwareID(pack->hardwareID)) {
|
||
hardwordIDType = 0x01;
|
||
}
|
||
|
||
else {
|
||
// log_info("Match_hardwordID error");
|
||
hardwordIDType = 0x00;
|
||
if (flag_run < 1) {
|
||
flag_run = 1;
|
||
}
|
||
memcpy(buff, buff+1, offset-1);
|
||
offset--;
|
||
continue;
|
||
}
|
||
}
|
||
|
||
/* 匹配通信ID */
|
||
if (offset == HY_analyzeCommunicationID || (flag_run > 2)) {
|
||
if (!(HY_matchCommunicationID(pack->communicationID) || Match_BroadcastCommunicationID(pack->communicationID))) {
|
||
if (flag_run < 2) {
|
||
flag_run = 2;
|
||
}
|
||
// log_info("Match_CommunicationID error");
|
||
memcpy(buff, buff+1, offset-1);
|
||
offset--;
|
||
continue;
|
||
}
|
||
}
|
||
|
||
/* 匹配 */
|
||
if (offset == HY_analyzeControlWord || (flag_run > 3)) {
|
||
if (pack->controlWord == HY_batteryStatus && hardwordIDType == 0x02) {
|
||
len = HY_batteryStatusQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_electricityStatistics && hardwordIDType == 0x02) {
|
||
len = HY_electricityStatisticsQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_sensorNumberConfiguration && hardwordIDType == 0x02) {
|
||
len = HY_sensorNumberConfiguration_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_sensorNumberInquiry && hardwordIDType == 0x01) {
|
||
len = HY_sensorNumberInquiryQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_chargingThresholdVoltageConfiguration && hardwordIDType == 0x02) {
|
||
len = HY_chargingThresholdVoltageConfig_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_chargingRangeVoltageQuery && hardwordIDType == 0x02) {
|
||
len = HY_chargRangeVoltageQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_resetInstruction && hardwordIDType == 0x02) {
|
||
len = HY_resetInstructionQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_chargingControlConfiguration && hardwordIDType == 0x02) {
|
||
len = HY_chargingControlConfig_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_chargingControlQuery && hardwordIDType == 0x02) {
|
||
len = HY_QueryChargingControl_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_configureProtocolType && hardwordIDType == 0x02) {
|
||
len = HY_configProtocolType_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_queryControlBoxConfiguration && hardwordIDType == 0x02) {
|
||
len = HY_queryControlBoxConfigurationQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_querySoftwareVersion && hardwordIDType == 0x02) {
|
||
len = HY_SoftwareVersionQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_enterConfigurationMode && hardwordIDType == 0x02) {
|
||
len = HY_enterConfigMode_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_configureHardwareID && hardwordIDType == 0x02) {
|
||
len = HY_configHardwareID_PACK_SIZE;
|
||
}
|
||
else if (pack->controlWord == HY_hardwareID_communicationIDQuery && hardwordIDType == 0x01) {
|
||
len = HY_QueryhardwareID_communicationID_PACK_SIZE;
|
||
}
|
||
else if (pack->controlWord == HY_modifyCommunicationID && hardwordIDType == 0x02) {
|
||
len = HY_modifyCommunicationIDChange_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_checkMotherboardTemperature && hardwordIDType == 0x02) {
|
||
len = HY_checkMotherboardTemperatureQuery_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_configurationTime && hardwordIDType == 0x02) {
|
||
len = HY_configTime_PACK_SIZE;
|
||
}
|
||
|
||
else if (pack->controlWord == HY_queryTime && hardwordIDType == 0x02) {
|
||
len = HY_timeQuery_PACK_SIZE;
|
||
}
|
||
|
||
else {
|
||
if (flag_run < 3) {
|
||
flag_run = 3;
|
||
}
|
||
// log_info("Match_controlWord error");
|
||
memcpy(buff, buff+1, offset-1);
|
||
offset--;
|
||
continue;
|
||
}
|
||
}
|
||
|
||
/* 匹配数据长度 */
|
||
if (offset == HY_analyzeDataLen || (flag_run > 4)) {
|
||
if (len != ((pack->dataLen[0] << 8 | pack->dataLen[1]) + 16)) {
|
||
if (flag_run < 4) {
|
||
flag_run = 4;
|
||
}
|
||
// log_info("Match_dataLen error: %x", len);
|
||
// log_info("Match_dataLen error: %x", (pack->dataLen[0] << 8 | pack->dataLen[1]) + 16);
|
||
// log_info("Match_dataLen error: %x", pack->dataLen[0]);
|
||
// log_info("Match_dataLen error: %x", pack->dataLen[1]);
|
||
memcpy(buff, buff+1, offset-1);
|
||
offset--;
|
||
continue;
|
||
}
|
||
}
|
||
|
||
if (offset == len) {
|
||
if (buff[len - 2] != HY_CheckFunc(buff, len - 2)
|
||
|| buff[len - 1] != g_cfgParameter.endFlagHY) {
|
||
if (flag_run < 5) {
|
||
flag_run = 5;
|
||
}
|
||
// log_info("check: %x, %x", (HY_CheckFunc(buff, len - 2) & 0xff), buff[len - 2]);
|
||
memcpy(buff, buff+1, offset-1);
|
||
offset--;
|
||
continue;
|
||
}
|
||
zeroConfigBuff();
|
||
return len;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
/**
|
||
* @brief 处理一条消息
|
||
* @param
|
||
* @retval
|
||
*/
|
||
static void HY_FRT_MsgHandler(device_handle device, uint8_t *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_Recv_pack *pack = (HY_Recv_pack *)pMsg;
|
||
|
||
for (u_int16_t i = 0; i < sizeof(g_hyMsgTbl) / sizeof(HY_FuncionMsgProcTable); i++){
|
||
if (pack->controlWord == g_hyMsgTbl[i].msgId){
|
||
g_hyMsgTbl[i].pMsgProc(device, pMsg, MsgLen);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* @brief 读取并解析串口数据
|
||
* @param
|
||
* @retval
|
||
*/
|
||
void HY_read_and_process_uart_data(device_handle device)
|
||
{
|
||
// if (uart_dev_char_present(device)) {
|
||
// Delay_Ms(20);
|
||
// memset(rs485_buff, 0, sizeof(rs485_buff));
|
||
// int ret = HY_uart_read_climate_pack(device, rs485_buff, sizeof(rs485_buff));
|
||
// if(ret > 0){
|
||
// HY_FRT_MsgHandler(device, rs485_buff, ret);
|
||
// }
|
||
// }
|
||
memset(rs485_buff, 0, sizeof(rs485_buff));
|
||
int ret = HY_uart_read_climate_pack(device, rs485_buff, sizeof(rs485_buff));
|
||
if(ret > 0){
|
||
HY_FRT_MsgHandler(device, rs485_buff, ret);
|
||
}
|
||
}
|
||
|
||
/* 电池状态数据报 */
|
||
void HY_MsgProcFunc_batteryStatus(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_batteryStatusResponse pack;
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = HY_batteryStatus;
|
||
pack.dataLen[0] = HY_batteryStatusResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_batteryStatusResponse_dataLen;
|
||
|
||
pack.batteryVoltage = getBatteryVoltage();
|
||
|
||
// pack.batteryVoltage = 6.66;
|
||
pack.dischargCurrent = getDischargCurrent();
|
||
pack.chargCurrent1 = getChargCurrent();
|
||
pack.SOC = getSOC();
|
||
pack.openCircuitVoltage1 = getSolarOpenCircuitVoltage();
|
||
|
||
// if (getDutyRatio() > 0 && getChargCurrent() > 0.05) {
|
||
if (getDutyRatio() > 0) {
|
||
pack.chargSwitchStatus1 = HY_switchON;
|
||
} else {
|
||
pack.chargSwitchStatus1 = HY_switchOFF;
|
||
}
|
||
|
||
pack.chargCurrent2 = pack.chargCurrent1;
|
||
pack.openCircuitVoltage2 = pack.openCircuitVoltage1;
|
||
|
||
pack.chargSwitchStatus2 = pack.chargSwitchStatus1;
|
||
|
||
pack.Mos_Temperature = getHighSideMosTemperature();
|
||
|
||
HY_batteryStatusQuery *Tpack = (HY_batteryStatusQuery *)pMsg;
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_batteryStatusResponse_PACK_SIZE - 2);
|
||
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_batteryStatusResponse_PACK_SIZE);
|
||
// uart_dev_write(device, &pack, HY_batteryStatusResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 电量统计数据报 */
|
||
void HY_MsgProcFunc_electricityStatistics(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_electricityStatisticsResponse pack;
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = HY_electricityStatistics;
|
||
|
||
pack.dataLen[0] = HY_electricityStatisticsResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_electricityStatisticsResponse_dataLen;
|
||
|
||
timeInfo time1, time2 = {0};
|
||
getRTC_Time(&time1);
|
||
time2 = getLastTime();
|
||
pack.statisticalDuration = differTime(&time1, &time2);
|
||
setLastTime(time1);
|
||
|
||
// pack.statisticalDuration = 0;
|
||
pack.totalChargCapacity = getTotalChargCapacity();
|
||
pack.totalElectricityConsumption = getTotalElectricityConsumption();
|
||
|
||
/* 查询后清空 */
|
||
totalChargCapacityInt(0);
|
||
totalElectricityConsumptionInt(0);
|
||
|
||
// float temp = 0;
|
||
// // temp = getTotalChargCapacity();
|
||
// savetotalChargCapacity(&temp);
|
||
// // temp = getTotalElectricityConsumption();
|
||
// savetotalElectricityConsumption(&temp);
|
||
|
||
|
||
HY_electricityStatisticsQuery *Tpack = (HY_electricityStatisticsQuery *)pMsg;
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_electricityStatisticsResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_electricityStatisticsResponse_PACK_SIZE);
|
||
// uart_dev_write(device, &pack, HY_electricityStatisticsResponse_PACK_SIZE);
|
||
|
||
}
|
||
|
||
/* 传感器号码配置 */
|
||
void HY_MsgProcFunc_sensorNumberConfiguration(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_sensorNumberConfigurationResponse pack;
|
||
|
||
HY_sensorNumberConfig *Tpack = (HY_sensorNumberConfig *)pMsg;
|
||
if (HY_matchHardwareID(Tpack->newHardwareID)) {
|
||
g_cfgParameter.communicationID[0] = Tpack->newCommunicationID[0];
|
||
g_cfgParameter.communicationID[1] = Tpack->newCommunicationID[1];
|
||
g_cfgParameter.communicationID[2] = Tpack->newCommunicationID[2];
|
||
g_cfgParameter.communicationID[3] = Tpack->newCommunicationID[3];
|
||
|
||
config_info temp_configInfo;
|
||
read_config_info(&temp_configInfo);
|
||
temp_configInfo.communicationID[0] = Tpack->newCommunicationID[0];
|
||
temp_configInfo.communicationID[1] = Tpack->newCommunicationID[1];
|
||
temp_configInfo.communicationID[2] = Tpack->newCommunicationID[2];
|
||
temp_configInfo.communicationID[3] = Tpack->newCommunicationID[3];
|
||
|
||
temp_configInfo.crc = checkModebusCrc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||
saveConfigInfo(&temp_configInfo);
|
||
|
||
pack.state = HY_success;
|
||
}
|
||
else {
|
||
pack.state = HY_fail;
|
||
}
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_sensorNumberConfigurationResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_sensorNumberConfigurationResponse_dataLen;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_sensorNumberConfigurationResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_sensorNumberConfigurationResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_sensorNumberConfigurationResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 传感器号码查询 */
|
||
void HY_MsgProcFunc_sensorNumberInquiry(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_sensorNumberInquiryQuery *Tpack = (HY_sensorNumberInquiryQuery *)pMsg;
|
||
|
||
HY_sensorNumberInquiryResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_sensorNumberInquiryResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_sensorNumberInquiryResponse_dataLen;
|
||
|
||
pack.hardwareIDR[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareIDR[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareIDR[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareIDR[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareIDR[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareIDR[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationIDR[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationIDR[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationIDR[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationIDR[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_sensorNumberInquiryResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_sensorNumberInquiryResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_sensorNumberInquiryResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 充电阈值电压配置 */
|
||
void HY_MsgProcFunc_chargingThresholdVoltageConfiguration(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
|
||
}
|
||
|
||
/* 充电域值电压查询 */
|
||
void HY_MsgProcFunc_chargingRangeVoltageQuery(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
|
||
}
|
||
|
||
/* 复位指令 */
|
||
void HY_MsgProcFunc_resetInstruction(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_resetInstructionQuery *Tpack = (HY_resetInstructionQuery *)pMsg;
|
||
|
||
HY_resetInstructionResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_resetInstructionResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_resetInstructionResponse_dataLen;
|
||
|
||
pack.state = HY_success;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_resetInstructionResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_resetInstructionResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_resetInstructionResponse_PACK_SIZE);
|
||
|
||
/* 复位 */
|
||
NVIC_SystemReset();
|
||
}
|
||
|
||
|
||
/* 充电控制配置 */
|
||
void HY_MsgProcFunc_chargingControlConfiguration(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_chargingControlConfig *Tpack = (HY_chargingControlConfig *)pMsg;
|
||
|
||
if (Tpack->chargInterfaceControl == HY_cSwitchON) {
|
||
if (getDutyRatio() == 0) {
|
||
beginChargWork();
|
||
}
|
||
}
|
||
|
||
if (Tpack->chargInterfaceControl == HY_cSwitchOFF) {
|
||
if (getDutyRatio() != 0) {
|
||
stopChargWork();
|
||
}
|
||
}
|
||
|
||
HY_chargingControlConfigResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_chargingControlConfigResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_chargingControlConfigResponse_dataLen;
|
||
|
||
pack.state = HY_success;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_chargingControlConfigResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_chargingControlConfigResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_chargingControlConfigResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 充电控制查询 */
|
||
static void HY_MsgProcFunc_chargingControlQuery(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_QueryChargingControl *Tpack = (HY_QueryChargingControl *)pMsg;
|
||
|
||
HY_QueryChargingControlResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_QueryChargingControlResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_QueryChargingControlResponse_dataLen;
|
||
|
||
// if (getDutyRatio() > 0 && g_cfgParameter.Charg_Current > 0.05) {
|
||
if (getDutyRatio() > 0) {
|
||
pack.chargInterface1 = HY_switchON;
|
||
} else {
|
||
pack.chargInterface1 = HY_switchOFF;
|
||
}
|
||
|
||
pack.chargInterface2 = pack.chargInterface1;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_QueryChargingControlResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_QueryChargingControlResponse_PACK_SIZE);
|
||
uart_dev_write(device, (uint8_t *)&pack, HY_QueryChargingControlResponse_PACK_SIZE);
|
||
}
|
||
|
||
|
||
/* 配置协议类型 */
|
||
void HY_MsgProcFunc_configureProtocolType(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_configProtocolType *Tpack = (HY_configProtocolType *)pMsg;
|
||
|
||
g_cfgParameter.protocolType = Tpack->protocolType;
|
||
|
||
config_info temp_configInfo;
|
||
read_config_info(&temp_configInfo);
|
||
temp_configInfo.protocolType = Tpack->protocolType;
|
||
|
||
temp_configInfo.crc = checkModebusCrc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||
saveConfigInfo(&temp_configInfo);
|
||
|
||
if (g_cfgParameter.protocolType == 0x01) {
|
||
g_cfgParameter.gw485_Baud = 9600;
|
||
} else if (g_cfgParameter.protocolType == 0x02) {
|
||
g_cfgParameter.gw485_Baud = 115200;
|
||
}
|
||
|
||
HY_chargingControlConfigResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = HY_responseConfigureProtocolType;
|
||
|
||
pack.dataLen[0] = HY_configProtocolTypeResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_configProtocolTypeResponse_dataLen;
|
||
|
||
pack.state = HY_success;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_configProtocolTypeResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_configProtocolTypeResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_configProtocolTypeResponse_PACK_SIZE);
|
||
|
||
Init_GW485_uart(g_cfgParameter.gw485_Baud);
|
||
}
|
||
|
||
|
||
/* 查询电池控制盒当前配置 */
|
||
void HY_MsgProcFunc_queryControlBoxConfiguration(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_queryControlBoxConfigurationQuery *Tpack = (HY_queryControlBoxConfigurationQuery *)pMsg;
|
||
|
||
HY_queryControlBoxConfigurationResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_queryControlBoxConfigurationResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_queryControlBoxConfigurationResponse_dataLen;
|
||
|
||
// pack.state = HY_success;
|
||
pack.protocolType = g_cfgParameter.protocolType;
|
||
pack.voltageLevel = 0x00; //12V
|
||
pack.mainBoardTemperatureSensorType = 0xFF;
|
||
pack.batteryTemperatureSensorType = 0xFF;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_queryControlBoxConfigurationResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_queryControlBoxConfigurationResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_queryControlBoxConfigurationResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 查询电池控制盒软件版本 */
|
||
void HY_MsgProcFunc_querySoftwareVersion(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_SoftwareVersionQuery *Tpack = (HY_SoftwareVersionQuery *)pMsg;
|
||
|
||
HY_SoftwareVersionQueryResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_SoftwareVersionQueryResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_SoftwareVersionQueryResponse_dataLen;
|
||
|
||
// strlcpy(pack.versionInformation, getVersionInformation(), 13);
|
||
memcpy(pack.versionInformation, getVersionInformation(), 13);
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_SoftwareVersionQueryResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_SoftwareVersionQueryResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_SoftwareVersionQueryResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 进入配置模式 */
|
||
void HY_MsgProcFunc_enterConfigurationMode(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_enterConfigMode *Tpack = (HY_enterConfigMode *)pMsg;
|
||
|
||
HY_enterConfigModeResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_enterConfigModeResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_enterConfigModeResponse_dataLen;
|
||
|
||
pack.state = HY_success;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_enterConfigModeResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_enterConfigModeResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_enterConfigModeResponse_PACK_SIZE);
|
||
|
||
beginHYconfigMode();
|
||
}
|
||
|
||
/* 配置控制盒硬件ID号 */
|
||
void HY_MsgProcFunc_configureHardwareID(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_configHardwareIDResponse pack;
|
||
|
||
HY_configHardwareID *Tpack = (HY_configHardwareID *)pMsg;
|
||
if (getHYconfigModeState() == TRUE) {
|
||
g_cfgParameter.hardwareID[0] = Tpack->hardwareID[0];
|
||
g_cfgParameter.hardwareID[1] = Tpack->hardwareID[1];
|
||
g_cfgParameter.hardwareID[2] = Tpack->hardwareID[2];
|
||
g_cfgParameter.hardwareID[3] = Tpack->hardwareID[3];
|
||
g_cfgParameter.hardwareID[4] = Tpack->hardwareID[4];
|
||
g_cfgParameter.hardwareID[5] = Tpack->hardwareID[5];
|
||
|
||
config_info temp_configInfo;
|
||
read_config_info(&temp_configInfo);
|
||
temp_configInfo.hardwareID[0] = Tpack->hardwareID[0];
|
||
temp_configInfo.hardwareID[1] = Tpack->hardwareID[1];
|
||
temp_configInfo.hardwareID[2] = Tpack->hardwareID[2];
|
||
temp_configInfo.hardwareID[3] = Tpack->hardwareID[3];
|
||
temp_configInfo.hardwareID[4] = Tpack->hardwareID[4];
|
||
temp_configInfo.hardwareID[5] = Tpack->hardwareID[5];
|
||
|
||
temp_configInfo.crc = checkModebusCrc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||
saveConfigInfo(&temp_configInfo);
|
||
|
||
pack.state = HY_success;
|
||
}
|
||
else {
|
||
pack.state = HY_fail;
|
||
}
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_configHardwareIDResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_configHardwareIDResponse_dataLen;
|
||
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_configHardwareIDResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_configHardwareIDResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_configHardwareIDResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 控制盒硬件ID号及通信ID号(原传感器号)查询 */
|
||
void HY_MsgProcFunc_hardwareID_communicationIDQuery(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_QueryhardwareID_communicationID *Tpack = (HY_QueryhardwareID_communicationID *)pMsg;
|
||
|
||
HY_QueryhardwareID_communicationIDResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_QueryhardwareID_dataLen >> 8;
|
||
pack.dataLen[1] = HY_QueryhardwareID_dataLen;
|
||
|
||
pack.hardwareIDR[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareIDR[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareIDR[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareIDR[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareIDR[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareIDR[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationIDR[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationIDR[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationIDR[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationIDR[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_QueryhardwareID_communicationIDResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_QueryhardwareID_communicationIDResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_QueryhardwareID_communicationIDResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 修改通信ID号(原传感器号) */
|
||
void HY_MsgProcFunc_modifyCommunicationID(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_modifyCommunicationIDChangeResponse pack;
|
||
|
||
HY_modifyCommunicationIDChange *Tpack = (HY_modifyCommunicationIDChange *)pMsg;
|
||
if (HY_matchHardwareID(Tpack->newHardwareID)) {
|
||
g_cfgParameter.communicationID[0] = Tpack->newCommunicationID[0];
|
||
g_cfgParameter.communicationID[1] = Tpack->newCommunicationID[1];
|
||
g_cfgParameter.communicationID[2] = Tpack->newCommunicationID[2];
|
||
g_cfgParameter.communicationID[3] = Tpack->newCommunicationID[3];
|
||
|
||
config_info temp_configInfo;
|
||
read_config_info(&temp_configInfo);
|
||
temp_configInfo.communicationID[0] = Tpack->newCommunicationID[0];
|
||
temp_configInfo.communicationID[1] = Tpack->newCommunicationID[1];
|
||
temp_configInfo.communicationID[2] = Tpack->newCommunicationID[2];
|
||
temp_configInfo.communicationID[3] = Tpack->newCommunicationID[3];
|
||
|
||
temp_configInfo.crc = checkModebusCrc((uint8_t *)&temp_configInfo, CONFIG_INFO_SIZE - 2);
|
||
saveConfigInfo(&temp_configInfo);
|
||
|
||
pack.state = HY_success1;
|
||
}
|
||
else {
|
||
pack.state = HY_fail;
|
||
}
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_modifyCommunicationIDChangeResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_modifyCommunicationIDChangeResponse_dataLen;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_modifyCommunicationIDChangeResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_modifyCommunicationIDChangeResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_modifyCommunicationIDChangeResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 查询主板温度值 */
|
||
void HY_MsgProcFunc_checkMotherboardTemperature(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_checkMotherboardTemperatureQuery *Tpack = (HY_checkMotherboardTemperatureQuery *)pMsg;
|
||
|
||
HY_checkMotherboardTemperatureResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_checkMotherboardTemperatureResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_checkMotherboardTemperatureResponse_dataLen;
|
||
|
||
pack.MotherboardTemperature = getHighSideMosTemperature();
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_checkMotherboardTemperatureResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_checkMotherboardTemperatureResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_checkMotherboardTemperatureResponse_PACK_SIZE);
|
||
}
|
||
|
||
/* 配置时间 */
|
||
void HY_MsgProcFunc_configTime(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_configTime *Tpack = (HY_configTime *)pMsg;
|
||
|
||
// static timeInfo time;
|
||
// time = Tpack->time;
|
||
// setRTC_Time(&time);
|
||
setRTC_Time((timeInfo *)&Tpack->time);
|
||
|
||
HY_configTimeResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_configTimeResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_configTimeResponse_dataLen;
|
||
|
||
pack.state = HY_success;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_configTimeResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_configTimeResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_configTimeResponse_PACK_SIZE);
|
||
}
|
||
|
||
|
||
|
||
|
||
/* 查询时间 */
|
||
static void HY_MsgProcFunc_queryTime(device_handle device, void *pMsg, uint32_t MsgLen)
|
||
{
|
||
HY_timeQuery *Tpack = (HY_timeQuery *)pMsg;
|
||
|
||
HY_queryTimeResponse pack;
|
||
|
||
pack.start_Flag = g_cfgParameter.startFlagHY;
|
||
|
||
pack.hardwareID[0] = g_cfgParameter.hardwareID[0];
|
||
pack.hardwareID[1] = g_cfgParameter.hardwareID[1];
|
||
pack.hardwareID[2] = g_cfgParameter.hardwareID[2];
|
||
pack.hardwareID[3] = g_cfgParameter.hardwareID[3];
|
||
pack.hardwareID[4] = g_cfgParameter.hardwareID[4];
|
||
pack.hardwareID[5] = g_cfgParameter.hardwareID[5];
|
||
|
||
pack.communicationID[0] = g_cfgParameter.communicationID[0];
|
||
pack.communicationID[1] = g_cfgParameter.communicationID[1];
|
||
pack.communicationID[2] = g_cfgParameter.communicationID[2];
|
||
pack.communicationID[3] = g_cfgParameter.communicationID[3];
|
||
|
||
pack.controlWord = Tpack->controlWord;
|
||
|
||
pack.dataLen[0] = HY_queryTimeResponse_dataLen >> 8;
|
||
pack.dataLen[1] = HY_queryTimeResponse_dataLen;
|
||
|
||
static timeInfo time;
|
||
getRTC_Time(&time);
|
||
|
||
pack.time = time;
|
||
|
||
pack.frameNumber = Tpack->frameNumber;
|
||
|
||
pack.check_Bit = HY_CheckFunc((uint8_t *)(&pack), HY_queryTimeResponse_PACK_SIZE - 2);
|
||
pack.end_Flag = g_cfgParameter.endFlagHY;
|
||
|
||
uart_interruptSend(device, (uint8_t *)&pack, HY_queryTimeResponse_PACK_SIZE);
|
||
// uart_dev_write(device, (uint8_t *)&pack, HY_queryTimeResponse_PACK_SIZE);
|
||
} |