#include "wrc_sizhu_v4.h" #include "wireless_remote_comm.h" #include "mbcrc1.h" #include "system_mem_para.h" #include "sizhu_ctrl_word.h" #include "main.h" #include "rs485_data_analysis_pro.h" #include "power_manage.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 data_head_g; static SIZHU_V4_PROTOCOL_TAIL_T proto_tail_up_g = {.frame_end_code = SIZHU_FRAME_TAIL}; void SizhuV4SendParaInit(void) { protocol_head_up_g.frame_start_code = SIZHU_FRAME_HEAD; arrayA_2_arrayB((uint8_t*)equipment_basic_inf_g.serial_number, (uint8_t*)&protocol_head_up_g.device_num, 8, LITTLE_ENDIAN); protocol_head_up_g.data_start_code = SIZHU_DATA_HEAD; // arrayA_2_arrayB((uint8_t*)&sys_clockBCD_g, (uint8_t*)&protocol_head_up_g.device_time, 8, LITTLE_ENDIAN); protocol_head_up_g.protocol_ver = SIZHU_PROTOCOL_VERSION; protocol_head_up_g.cmd_code_u16 = SIZHU_CONTROL_CODE_DATAUP; protocol_head_up_g.key_ver = KEY_VERSION + 0; //ÓÃ0ºÅ²âÊÔÃØÔ¿¼ÓÃÜ data_head_g.equipment_type = (0x02 <<6) + equipment_basic_inf_g.equipment_type; data_head_g.device_type = equipment_basic_inf_g.product_type; data_head_g.sys_send_type = wrc_ctrl_para_g.wrc_start_flag; arrayA_2_arrayB((uint8_t*)&link_info_g.ICCID, (uint8_t*)&data_head_g.iccid, 20, LITTLE_ENDIAN); data_head_g.signal_intensity = link_info_g.net_signal_intensity; if(data_head_g.signal_intensity > 20) data_head_g.signal_intensity_level = 1; else if(data_head_g.signal_intensity > 15) data_head_g.signal_intensity_level = 2; else data_head_g.signal_intensity_level = 3; data_head_g.net_info = link_info_g.SIM_Type ; arrayA_2_arrayB((uint8_t*)main_equipment_hardware_software_inf_g.soft_serial_number, (uint8_t*)&data_head_g.software_version, 4, LITTLE_ENDIAN); data_head_g.account_state = __SYS_STATUS_BYTES_GET(account_state); arrayA_2_arrayB((uint8_t*)system_alarm_word_g.alarm_word_union, (uint8_t*)&data_head_g.alarm_word, 14, LITTLE_ENDIAN); data_head_g.valve_close_reason = save_valve_para_g.valve_close_ID ; data_head_g.data_package_format = 0; //²âÊÔ·¢ËÍÒ»Ö¡µ±Ç°Êý¾Ý #ifdef WRC_TEST_MODE_1 protocol_head_up_g.frame_sum = 1; protocol_head_up_g.frame_num = 1; #else #endif } void DataAes128EcbEncrypt() { } void SizhuV4SendNormalData(void) { uint8_t send_buf[1024] = {0}; 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); //Ìî³äÊý¾Ý //²âÊÔ·¢ËÍÒ»Ö¡µ±Ç°Êý¾Ý #ifdef WRC_TEST_MODE_1 protocol_head_up_g.frame_sum = 1; protocol_head_up_g.frame_num = 1; protocol_head_up_g.data_length = DATA_PACKET_HEAD_LENGTH + DATA_PACKET_LENGTH; data_head_g.data_pack_num = 1; arrayA_2_arrayB((uint8_t*)&sys_clockBCD_g, (uint8_t*)&one_pack_data.sample_time, 8, LITTLE_ENDIAN); one_pack_data.sc_cumulate = flow_meter_data_g.cumulate_s.forward_cumulate_sc * 10000; one_pack_data.wc_cumulate = flow_meter_data_g.cumulate_s.forward_cumulate_wc * 10000; one_pack_data.sc_instant = flow_meter_data_g.instant_sc * 10000; one_pack_data.wc_instant = flow_meter_data_g.instant_wc * 10000; one_pack_data.pressure = flow_meter_data_g.pressure; 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_per = pwr_vol_g.lith_synthesize_per; one_pack_data.alka_vcc = pwr_vol_g.alka_vcc; 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); arrayA_2_arrayB((uint8_t*)&one_pack_data, (uint8_t*)&send_buf[FIRST_DATA_SHIFT_SIZHU + DATA_PACKET_HEAD_LENGTH], DATA_PACKET_LENGTH, LITTLE_ENDIAN); #else #endif arrayA_2_arrayB((uint8_t*)&protocol_head_up_g, (uint8_t*)&send_buf[0], FIRST_DATA_SHIFT_SIZHU, LITTLE_ENDIAN); arrayA_2_arrayB((uint8_t*)&data_head_g, (uint8_t*)&send_buf[FIRST_DATA_SHIFT_SIZHU], DATA_PACKET_HEAD_LENGTH, LITTLE_ENDIAN); //¼ÓÃÜ //¼ÆËãcrc //·¢ËÍ } WRC_STATUS SizhuV4ProtocolDataAnalysis(uint8_t *receive_buf) { char *buf_p = NULL; uint16_t count_i = 0; SIZHU_V4_PROTOCOL_HEAD_T protocol_head_rec; uint16_t check_crc; // uint8_t key_ver; count_i =0; buf_p +=2; //ÒÆµ½ÏÂÒ»¸ö¶ººÅ while(*buf_p != SIZHU_FRAME_HEAD) //buf_pÖ¸ÏòÖ¡Í· { count_i++; buf_p ++; if(count_i>10){ return WRC_WAIT_REC_DATA; //10¸öÖ®ÄÚËѲ»µ½Ö¡Í·£¬Êý¾ÝÎÞЧ } } 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*)&protocol_head_rec, 2, LITTLE_ENDIAN); if(check_crc == usMBCRC16(0xFFFF,(uint8_t *)buf_p,FIRST_DATA_SHIFT_SIZHU + protocol_head_rec.data_length)){ uint8_t ack_buf[1024] = {0}; arrayA_2_arrayB((uint8_t*)&sys_clockBCD_g, (uint8_t*)&protocol_head_rec.device_time, sizeof(sys_clockBCD_g), LITTLE_ENDIAN); if((protocol_head_rec.key_ver & 0x80)==0x80){ //? ¸ù¾ÝÃÜÔ¿ºÅ½âÃÜ }else{ arrayA_2_arrayB((uint8_t*)buf_p, (uint8_t*)&ack_buf[FIRST_DATA_SHIFT_SIZHU], protocol_head_rec.data_length, LITTLE_ENDIAN);//Ã÷ÎÄ } switch(protocol_head_rec.cmd_code_u16){ case SIZHU_CONTROL_CODE_DATAUP :; //?´ý²¹³ä default: break; } }else{ } return WRC_WAIT_REC_DATA; }