public short Calc_ChecksumOfAckPacketObj(AckClass PktObj) { short checksum = 0; foreach (byte chData in PktObj.DeviceId) { checksum += chData; } foreach (byte chData in PktObj.Password) { checksum += chData; } foreach (byte chData in PktObj.TypeId) { checksum += chData; } foreach (byte chData in PktObj.Packet_sno) { checksum += chData; } foreach (byte chData in PktObj.Continue_Sts) { checksum += chData; } foreach (byte chData in PktObj.Data) { checksum += chData; } /* Condition should be added if and only if checksum is greater than 65535(2bytes).*/ // checksum &= 0xff; return(checksum); }
private byte[] ObjectToByteArray(AckClass obj) { try { /* Need to place the bytes[] into Object */ /* Get the data bytes length */ int array_len = 0; array_len = Global.Packet_overhead_len; // Asumming Packet has no data. int data_bytes_len = obj.Data.Length; // Packet_overhead_len is Fixed for all packets but data changes. if (data_bytes_len > 0) /* Packet has Some Databyte need to change the length */ { array_len = array_len + data_bytes_len; } /* Creating new Array */ byte[] Ack_bytes = new byte[array_len]; int Packet_Checksum_StartIdx = Global.Packet_data_start_Idx + data_bytes_len; /* Frame Packet Object from byte[] data */ Array.Copy(obj.packetHeader, 0, Ack_bytes, Global.Packet_Header_start_Idx, Global.Packet_Header_len); // Copy PacketHeader Array.Copy(obj.Packet_Length, 0, Ack_bytes, Global.PacketLength_start_Idx, Global.PacketLength_len); // Copy Length of Packet Array.Copy(obj.DeviceId, 0, Ack_bytes, Global.Packet_DeviceID_start_Idx, Global.Packet_DeviceID_len); // Copy Device Id of Packet Array.Copy(obj.Password, 0, Ack_bytes, Global.Packet_Password_start_Idx, Global.Packet_Password_len); // Copy System Password of Packet Array.Copy(obj.TypeId, 0, Ack_bytes, Global.Packet_TypeId_start_Idx, Global.Packet_TypeId_len); // Copy TYpeID of Packet Array.Copy(obj.Packet_sno, 0, Ack_bytes, Global.Packet_Sno_start_Idx, Global.Packet_Sno_len); // Copy Packet SNo of Packet Array.Copy(obj.Continue_Sts, 0, Ack_bytes, Global.Packet_ContinueSts_start_Idx, Global.Packet_ContinueSts_len); // Copy Continue_Sts of th Packet Array.Copy(obj.Data, 0, Ack_bytes, Global.Packet_data_start_Idx, data_bytes_len); // Copy Data of Packet Array.Copy(obj.Checksum, 0, Ack_bytes, Packet_Checksum_StartIdx, Global.Packet_Chcksum_len); // Copy Checksum of Packet return(Ack_bytes); // Returning Ack bytes } catch (Exception ex) { DateTime now_time = DateTime.Now; string time = Convert.ToString(now_time); Global.AppendTexttoFile(Global.exception_filepath, "Exception Occured in ObjectToByteArray: " + ex.Message + time); // Logging the Execptions Ocuured return(null); } }
private byte[] FrameCommunicationAck(PacketClass PacketObj) { try { AckClass AckPacket = new AckClass(); AckPacket.packetHeader = Global.CommInitResponse_pkt_header; // Length ?? 18 // AckPacket.Packet_Length = PacketObj.Packet_Length; { Should not do like this beacuse it is going to change Original object } PacketObj.Packet_Length.CopyTo(AckPacket.Packet_Length, 0); PacketObj.DeviceId.CopyTo(AckPacket.DeviceId, 0); PacketObj.Password.CopyTo(AckPacket.Password, 0); Global.CommInitAckPkt_TypeID.CopyTo(AckPacket.TypeId, 0); Global.CommInitAckPkt_SNo.CopyTo(AckPacket.Packet_sno, 0); Global.CommInitAckContinue_Sts.CopyTo(AckPacket.Continue_Sts, 0); AckPacket.Data = new byte[] { }; // Empty Data Feild short checksum = Calc_ChecksumOfAckPacketObj(AckPacket); AckPacket.Checksum = BitConverter.GetBytes(checksum); // Getting Bytes from checksum.. AckPacket = Reverse_AckPacketBytes(AckPacket); // Reversing the AckPacket Object Is Causing the Device Id in Reverse byte[] Final_bytes = ObjectToByteArray(AckPacket); // Serializing Object to Byte Array. return(Final_bytes); // Returning Serialozed Byte array. } catch (Exception ex) { DateTime now_time = DateTime.Now; string time = Convert.ToString(now_time); Global.AppendTexttoFile(Global.exception_filepath, "Exception Ocuured While FrameCommunicationAck: " + ex.Message + time); // Logging the Execptions Ocuured return(null); } }
public AckClass Reverse_AckPacketBytes(AckClass Ack_obj) { try { Array.Reverse(Ack_obj.packetHeader); // Reversing the Packet Header Bytes Array.Reverse(Ack_obj.Packet_Length); Array.Reverse(Ack_obj.DeviceId); Array.Reverse(Ack_obj.Password); Array.Reverse(Ack_obj.TypeId); Array.Reverse(Ack_obj.Packet_sno); Array.Reverse(Ack_obj.Continue_Sts); Array.Reverse(Ack_obj.Checksum); return(Ack_obj); } catch (Exception ex) { DateTime now_time = DateTime.Now; string time = Convert.ToString(now_time); Global.AppendTexttoFile(Global.exception_filepath, "Exception Occured in Reverse_PacketBytes: " + ex.Message + time); // Logging the Execptions Ocuured return(null); } }