From b39a40b0191e0a8b155db74e885ff66e17b91896 Mon Sep 17 00:00:00 2001
From: jinlicong <493886250@qq.com>
Date: Thu, 06 Jun 2024 19:25:15 +0800
Subject: [PATCH] 继续完善

---
 Function/WirelessRemoteComm/wrc_sizhu_v4.c |   58 ++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/Function/WirelessRemoteComm/wrc_sizhu_v4.c b/Function/WirelessRemoteComm/wrc_sizhu_v4.c
index a8fa7b8..54187bc 100644
--- a/Function/WirelessRemoteComm/wrc_sizhu_v4.c
+++ b/Function/WirelessRemoteComm/wrc_sizhu_v4.c
@@ -9,12 +9,14 @@
 #include "AES128.h"
 #include "system_general_para.h"
 #include "linked_list.h"
+#include "uart.h"
 
 static	SIZHU_V4_PROTOCOL_HEAD_T	protocol_head_up_g ={.frame_start_code = SIZHU_FRAME_HEAD,.data_start_code = SIZHU_DATA_HEAD};
 static	SIZHU_V4_PROTOCOL_NORMAL_DATA_HEAD_T	up_data_head_g;
 static	SIZHU_V4_PROTOCOL_TAIL_T	proto_tail_up_g = {.frame_end_code = SIZHU_FRAME_TAIL};
 static	SIZHU_V4_REPORT_CTRL_PARA_T	report_ctrl_para_g;
 ErrorStatus	wrc_sizhuV4_result_flag = FAIL;    //���յ�ͨѶ����жϣ���ʼ��FAIL�����ո���Э��ȷ�ϱ���ͨѶ�Ƿ�ɹ�������˼����Э��ͨ������֡�ж��Ƿ����ճɹ�
+ErrorStatus	report_sizhuV4_result_flag = FAIL; //�ϱ��Ƿ�ɹ���־������һ��֮����û���ϴ��ɹ�������wrc_sizhuV4_result_flagͨѶ�Ƿ�ɹ���һ��������һ�㣬ֻҪ�����ϱ���Ӧ�ɹ��������ϱ��ɹ����յ�����֡Ҳ����ɹ�
 
 //static	uint16_t	current_report_data_num = 0;
 
@@ -41,7 +43,7 @@
 	/*ͨѶ���*/
 	wrc_ctrl_para_g.time_out_time_sec = wrc_para_sizhu_g.comm_timeout_time; //��ʱʱ��
 	wrc_sizhuV4_result_flag = FAIL;
-	wrc_ctrl_para_g.wrc_restart_time_sec_cnt = wrc_para_sizhu_g.retransmission_interval ; //���ر����ʱ��
+	wrc_ctrl_para_g.wrc_restart_time_sec_cnt = wrc_para_sizhu_g.retransmission_interval * 60 ; //���ر����ʱ��
 	
 	/*�����*/
 	protocol_head_up_g.frame_start_code = SIZHU_FRAME_HEAD;
@@ -107,19 +109,21 @@
 {
 	uint8_t yushu;
 	uint8_t	fill_num;
+	uint16_t	Encrypt_Bytes= 0;
 	
 	if((KeyVer&0x7f) > 8)
 		return;
 
 //	*length = ((*length % 16 )!=0) ? ((*length >>4) + 1)*16 : *length;
 	/*����16���������������16����������ȱN�����N��N*/
-	yushu = (*length) & 0x0f;
+	Encrypt_Bytes = *length;
+	yushu = Encrypt_Bytes & 0x0f;
 	if(yushu != 0){
 		fill_num = 16 - yushu;
 		for(uint8_t count_i=0;count_i < fill_num ;count_i ++){
-			*(buf_in + *length + count_i) = fill_num;
+			*(buf_in + Encrypt_Bytes + count_i) = fill_num;
 		}
-		*length = ((*length >>4) + 1) <<4;
+		*length = ((Encrypt_Bytes >>4) + 1) <<4;
 	}
 	
 	//��16��Ϊһ����м���
@@ -152,11 +156,12 @@
 uint16_t	SizhuV4SendNormalData2buf(uint8_t * send_buf)
 {
 //	uint8_t send_buf[1024] = {0};
+	uint16_t	data_length =0;
 	uint16_t	crc_addr;
 	uint8_t		current_frame_data_num;
 	SIZHU_V4_PROTOCOL_NORMAL_DATA_PACK_T	one_pack_data;
 	
-	arrayA_2_arrayB((uint8_t*)&sys_clockBCD_g, (uint8_t*)&protocol_head_up_g.device_time, 8, LITTLE_ENDIAN);
+	arrayA_2_arrayB((uint8_t*)&sys_clockBCD_g, (uint8_t*)&protocol_head_up_g.device_time, sizeof(sys_clockBCD_g), LITTLE_ENDIAN);
 //	arrayA_2_arrayB((uint8_t*)system_alarm_word_g.alarm_word_union, (uint8_t*)&up_data_head_g.alarm_word, 14, LITTLE_ENDIAN); //ʱ��ͱ����ֻ���ʱ���£����Է����ϱ�ǰ��ֵ
 	//�����б����ֶ��ǽ�ռ1��Bit������£������û�|�����ӱ������������Խ��ϴ�δ�ϱ��ɹ������ֵ����µı����ּ����ϱ�
 	for(uint8_t count_i =0;count_i < 7;count_i ++){
@@ -181,9 +186,9 @@
 	one_pack_data.temperature = flow_meter_data_g.temperature;
 	one_pack_data.balance = save_realtime_data_g.realtime_billing_data_s.balance_now * 1000 ;
 	one_pack_data.uint_price = save_realtime_data_g.realtime_billing_data_s.price_now;
-	one_pack_data.lith_vcc = pwr_vol_g.lith_vcc;
+	one_pack_data.lith_vcc = pwr_vol_g.lith_vcc * 10;
 	one_pack_data.lith_vcc_per = pwr_vol_g.lith_synthesize_per;
-	one_pack_data.alka_vcc = pwr_vol_g.alka_vcc;
+	one_pack_data.alka_vcc = pwr_vol_g.alka_vcc * 10;
 	one_pack_data.alka_vcc_per = pwr_vol_g.alka_vcc_per;
 	arrayA_2_arrayB((uint8_t*)&system_status_word_g.status_word_union, (uint8_t*)&one_pack_data.status, 12, LITTLE_ENDIAN);
 	
@@ -206,7 +211,9 @@
 	
 	//����
 	if((protocol_head_up_g.key_ver & 0x80) == 0x80){
-		DataAes128EcbEncrypt(protocol_head_up_g.key_ver,(uint8_t*)&send_buf[FIRST_DATA_SHIFT_SIZHU],(uint8_t*)&send_buf[FIRST_DATA_SHIFT_SIZHU],&protocol_head_up_g.data_length);
+		data_length = protocol_head_up_g.data_length;
+		DataAes128EcbEncrypt(protocol_head_up_g.key_ver,(uint8_t*)&send_buf[FIRST_DATA_SHIFT_SIZHU],(uint8_t*)&send_buf[FIRST_DATA_SHIFT_SIZHU],&data_length);
+		protocol_head_up_g.data_length = data_length;  //������Ҫ��䣬���Ȼ��
 	}
 	
 	//���ڼ������ᵼ�����ݳ��ȱ仯������֡ͷ��ת����Ҫ���ڼ���֮��
@@ -228,6 +235,7 @@
 	WRC_STATUS	return_code = WRC_WAIT_REC_DATA;
 	if(*receive_buf == 0x00){
 		//��Ӧ�ɹ�
+		report_sizhuV4_result_flag = PASS;
 		if(protocol_head_up_g.frame_num == 1){
 			//?��һ���ϱ��ɹ�֮����������֣�����һ֡ʱû��������Ӧ֡�����ڽ���֡�л�����ƽ̨���µ�ָ�����ٴ����������
 			for(uint8_t count_j =0;count_j < 7;count_j ++){
@@ -260,6 +268,7 @@
 	int difference_value;
 	
 	wrc_sizhuV4_result_flag = PASS;
+	report_sizhuV4_result_flag = PASS;
 	
 	//?��һ���ϱ��ɹ�֮����������֣�����һ֡ʱû��������Ӧ֡�����ڽ���֡�л�����ƽ̨���µ�ָ�����ٴ����������
 	for(uint8_t count_j =0;count_j < 7;count_j ++){
@@ -324,6 +333,22 @@
 	return return_code;
 }
 
+
+
+
+//�������ط�
+WRC_STATUS	SetBalanceValveClosePro(uint8_t *receive_buf,uint8_t *ack_buf,uint16_t *ack_buf_length)
+{
+	WRC_STATUS	return_code = WRC_WAIT_REC_DATA;
+
+
+	//?�洢
+
+	ack_buf[0]	= 0;//�ɹ�
+	*ack_buf_length = 1; //����ǰ�����ݳ���
+	return return_code;
+}
+
 WRC_STATUS	SetAccountPro(uint8_t *receive_buf,uint8_t *ack_buf,uint16_t *ack_buf_length)
 {
 	WRC_STATUS	return_code = WRC_WAIT_REC_DATA;
@@ -355,17 +380,17 @@
 
 WRC_STATUS	SizhuV4ProtocolDataAnalysis(uint8_t *receive_buf,uint8_t *ack_buf,uint16_t *ack_buf_length)
 {
-	char *buf_p = NULL;
+	uint8_t *buf_p = NULL;
 	uint16_t count_i = 0;
 	SIZHU_V4_PROTOCOL_HEAD_T	protocol_head_rec;
-	uint16_t	check_crc;
+	uint16_t	check_crc,recv_crc;
 	uint16_t	crc_addr;
 	WRC_STATUS	return_code = WRC_WAIT_REC_DATA;
 //	uint8_t	key_ver;
 	uint16_t	ack_data_length = 0; //����ǰ�ij���
 
 	count_i =0;
-	buf_p +=2;  //�Ƶ���һ������
+	buf_p =  receive_buf + 2;  //�Ƶ���һ������
 	while(*buf_p != SIZHU_FRAME_HEAD)  //buf_pָ��֡ͷ
 	{
 		count_i++;
@@ -376,9 +401,12 @@
 	}
 	
 	arrayA_2_arrayB((uint8_t*)buf_p, (uint8_t*)&protocol_head_rec, sizeof(protocol_head_rec), LITTLE_ENDIAN);
-	arrayA_2_arrayB((uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU + protocol_head_rec.data_length), (uint8_t*)&check_crc, 2, LITTLE_ENDIAN);
-
-	if(check_crc == usMBCRC16(0xFFFF,(uint8_t *)buf_p,FIRST_DATA_SHIFT_SIZHU + protocol_head_rec.data_length)){
+	arrayA_2_arrayB((uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU + protocol_head_rec.data_length), (uint8_t*)&recv_crc, 2, BIG_ENDIAN);
+	check_crc = usMBCRC16(0xFFFF,(uint8_t *)buf_p,FIRST_DATA_SHIFT_SIZHU + protocol_head_rec.data_length);
+	if(check_crc == recv_crc){
+		
+		WRC_RX_DMA_CH3_reload(); //����CRCͨ��������Ϊ������Ҫ���յ������Ѿ���ɣ���Ҫ����DMA����, 
+		
 		if((protocol_head_rec.key_ver & 0x80)==0x80){
 			//? ������Կ�Ž���
 			DataAes128EcbDecrypt(protocol_head_rec.key_ver,(uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU),(uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU),protocol_head_rec.data_length);
@@ -392,6 +420,8 @@
 			case SIZHU_CONTROL_CODE_MODIFY_KEY : return_code = SetKeyPro((uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU),ack_buf + FIRST_DATA_SHIFT_SIZHU,&ack_data_length);   break;
 			case SIZHU_CONTROL_CODE_PUSH_SETTLEMENT_INFO : return_code = PushSettlementInfoPro((uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU),ack_buf + FIRST_DATA_SHIFT_SIZHU,&ack_data_length);   break;
 			case SIZHU_CONTROL_CODE_ACCOUNT_STATUS : return_code = PushSettlementInfoPro((uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU),ack_buf + FIRST_DATA_SHIFT_SIZHU,&ack_data_length);   break;
+			
+			case SIZHU_CONTROL_CODE_SET_BALANCE_INSUF_CLOSE_VALVE : return_code = SetBalanceValveClosePro((uint8_t*)(buf_p + FIRST_DATA_SHIFT_SIZHU),ack_buf + FIRST_DATA_SHIFT_SIZHU,&ack_data_length);   break;
 			//?������
 			default: break;
 		}

--
Gitblit v1.9.3