Gurux.DLMS.Objects.GXDLMSImageTransfer.IGXDLMSBase C# (CSharp) Method

IGXDLMSBase() private method

private IGXDLMSBase ( GXDLMSSettings settings, ValueEventArgs e ) : byte[]
settings Gurux.DLMS.GXDLMSSettings
e Gurux.DLMS.ValueEventArgs
return byte[]
        byte[] IGXDLMSBase.Invoke(GXDLMSSettings settings, ValueEventArgs e)
        {
            ImageTransferStatus = ImageTransferStatus.NotInitiated;
            //Image transfer initiate
            if (e.Index == 1)
            {
                ImageFirstNotTransferredBlockNumber = 0;
                ImageTransferredBlocksStatus = "";
                object[] value = (object[])e.Parameters;
                string ImageIdentifier = ASCIIEncoding.ASCII.GetString((byte[])value[0]);
                ImageSize = (UInt32)value[1];
                ImageTransferStatus = ImageTransferStatus.TransferInitiated;
                List<GXDLMSImageActivateInfo> list = new List<GXDLMSImageActivateInfo>(ImageActivateInfo);
                GXDLMSImageActivateInfo item = new GXDLMSImageActivateInfo();
                item.Size = ImageSize;
                item.Identification = ImageIdentifier;
                list.Add(item);
                ImageActivateInfo = list.ToArray();
                StringBuilder sb = new StringBuilder((int)ImageSize);
                for (uint pos = 0; pos < ImageSize; ++pos)
                {
                    sb.Append('0');
                }
                ImageTransferredBlocksStatus = sb.ToString();
                return new byte[] { 0 };
            }
            //Image block transfer
            else if (e.Index == 2)
            {
                object[] value = (object[])e.Parameters;
                uint imageIndex = (uint)value[0];
                char[] tmp = ImageTransferredBlocksStatus.ToCharArray();
                tmp[(int)imageIndex] = '1';
                ImageTransferredBlocksStatus = new string(tmp);
                ImageFirstNotTransferredBlockNumber = imageIndex + 1;
                ImageData[imageIndex] = (byte[])value[1];
                ImageTransferStatus = ImageTransferStatus.TransferInitiated;
                return new byte[] { 0 };
            }
            //Image verify
            else if (e.Index == 3)
            {
                ImageTransferStatus = ImageTransferStatus.VerificationInitiated;
                //Check that size match.
                int size = 0;
                foreach (KeyValuePair<uint, byte[]> it in ImageData)
                {
                    size += it.Value.Length;
                }
                if (size != ImageSize)
                {
                    //Return HW error.
                    ImageTransferStatus = ImageTransferStatus.VerificationFailed;
                    throw new Exception("Invalid image size.");
                }
                ImageTransferStatus = ImageTransferStatus.VerificationSuccessful;
                return new byte[] { 0 };
            }
            //Image activate.
            else if (e.Index == 4)
            {
                ImageTransferStatus = ImageTransferStatus.ActivationSuccessful;
                return new byte[] { 0 };
            }
            else
            {
                e.Error = ErrorCode.ReadWriteDenied;
                return null;
            }
        }

Same methods

GXDLMSImageTransfer::IGXDLMSBase ( ) : int
GXDLMSImageTransfer::IGXDLMSBase ( ) : int[]
GXDLMSImageTransfer::IGXDLMSBase ( GXDLMSSettings settings, ValueEventArgs e ) : object
GXDLMSImageTransfer::IGXDLMSBase ( ) : string[]
GXDLMSImageTransfer::IGXDLMSBase ( GXDLMSSettings settings, ValueEventArgs e ) : void