Пример #1
0
        public static void MakeTypedReference_ReadOnlyField_Succeeds()
        {
            var os = new OneStruct()
            {
                b = 42, field = "data"
            };
            var            c  = new ClassWithReadOnlyField(os);
            TypedReference tr = TypedReference.MakeTypedReference(c, new FieldInfo[] { c.GetType().GetField("Value") }); // doesn't throw

            Assert.Equal(os, TypedReference.ToObject(tr));
        }
Пример #2
0
        public static void MakeTypedReference_ToObjectTests()
        {
            OneStruct structObj = new OneStruct {
                field = "field", b = 2343
            };
            OtherType data = new OtherType {
                oneStruct = structObj
            };
            Type           dataType  = data.GetType();
            TypedReference reference = TypedReference.MakeTypedReference(data, new FieldInfo[] { dataType.GetField("oneStruct"), typeof(OneStruct).GetField("field") });

            Assert.Equal("field", TypedReference.ToObject(reference));

            reference = TypedReference.MakeTypedReference(data, new FieldInfo[] { dataType.GetField("oneStruct") });
            Assert.Equal(structObj, TypedReference.ToObject(reference));
        }
Пример #3
0
            public AllConfig(byte[] array)
            {
                _discretOffset     = 20;
                _relayOffset       = (byte)(_discretOffset + DISCRET_MAX * 2 + 1);
                _diodeOffset       = (byte)(_relayOffset + DIODE_MAX * 2 + 1);
                _systemDiodeOffset = (byte)(_diodeOffset + DIODE_MAX * 2 + 1);

                if (array.Length != 256)
                {
                    throw new ArgumentException();
                }
                var crc = Crc16.CalcCrcFast(array, 256 - 2);

                if (Common.TOWORD(array[254], array[255]) != crc)
                {
                    MessageBox.Show("Ошибка CRC");
                    throw new ArgumentException();
                }
                var ascii = new ASCIIEncoding();

                if (_header != new string(ascii.GetChars(array, 0, _header.Length)))
                {
                    throw new ArgumentException();
                }
                var discretOffset     = array[16];
                var relayOffset       = array[17];
                var diodeOffset       = array[18];
                var systemDiodeOffset = array[19];

                _discretCount  = array[discretOffset];
                _discretConfig = new OneStruct[DISCRET_MAX];

                for (int i = 0; i < DISCRET_MAX; i++)
                {
                    if (i < _discretCount)
                    {
                        _discretConfig[i] =
                            new OneStruct(Common.TOWORD(array[discretOffset + i * 2 + 2], array[discretOffset + i * 2 + 1]));
                    }
                    else
                    {
                        _discretConfig[i] = new OneStruct();
                    }
                }

                _relayCount  = array[relayOffset];
                _relayConfig = new OneStruct[RELAY_MAX];
                for (int i = 0; i < RELAY_MAX; i++)
                {
                    if (i < _relayCount)
                    {
                        _relayConfig[i] =
                            new OneStruct(Common.TOWORD(array[relayOffset + i * 2 + 2], array[relayOffset + i * 2 + 1]));
                    }
                    else
                    {
                        _relayConfig[i] = new OneStruct();
                    }
                }

                _diodeCount  = array[diodeOffset];
                _diodeConfig = new OneStruct[DIODE_MAX];
                for (int i = 0; i < DIODE_MAX; i++)
                {
                    if (i < _diodeCount)
                    {
                        _diodeConfig[i] =
                            new OneStruct(Common.TOWORD(array[diodeOffset + i * 2 + 2], array[diodeOffset + i * 2 + 1]));
                    }
                    else
                    {
                        _diodeConfig[i] = new OneStruct();
                    }
                }

                _systemDiodeCount  = array[systemDiodeOffset];
                _systemDiodeConfig = new OneStruct[SYSTEM_DIODE_MAX];
                for (int i = 0; i < _systemDiodeCount; i++)
                {
                    if (i < _systemDiodeCount)
                    {
                        _systemDiodeConfig[i] =
                            new OneStruct(Common.TOWORD(array[systemDiodeOffset + i * 2 + 2], array[systemDiodeOffset + i * 2 + 1]));
                    }
                    else
                    {
                        _systemDiodeConfig[i] = new OneStruct();
                    }
                }
            }
Пример #4
0
 public ClassWithReadOnlyField(OneStruct value) => Value = value;
Пример #5
0
        private async void button1_Click(object sender, EventArgs e)
        {
            var relays = new OneStruct[RELAY_MAX];

            for (int i = 0; i < _relayDgv.Rows.Count; i++)
            {
                relays[i]      = new OneStruct();
                relays[i].Port = _relayDgv.Rows[i].Cells[1].Value.ToString();
                relays[i].Pin  = _relayDgv.Rows[i].Cells[2].Value.ToString();
                relays[i].Pull = Convert.ToBoolean(_relayDgv.Rows[i].Cells[3].Value);
                relays[i].Inv  = Convert.ToBoolean(_relayDgv.Rows[i].Cells[4].Value);
            }
            _config.Relays = relays;


            var discrets = new OneStruct[DISCRET_MAX];

            for (int i = 0; i < _discretDgv.Rows.Count; i++)
            {
                discrets[i]      = new OneStruct();
                discrets[i].Port = _discretDgv.Rows[i].Cells[1].Value.ToString();
                discrets[i].Pin  = _discretDgv.Rows[i].Cells[2].Value.ToString();
                discrets[i].Pull = Convert.ToBoolean(_discretDgv.Rows[i].Cells[3].Value);
                discrets[i].Inv  = Convert.ToBoolean(_discretDgv.Rows[i].Cells[4].Value);
            }
            _config.Discrets = discrets;


            var diodes = new OneStruct[DIODE_MAX];

            for (int i = 0; i < _diodeDgv.Rows.Count; i++)
            {
                diodes[i]      = new OneStruct();
                diodes[i].Port = _diodeDgv.Rows[i].Cells[1].Value.ToString();
                diodes[i].Pin  = _diodeDgv.Rows[i].Cells[2].Value.ToString();
                diodes[i].Pull = Convert.ToBoolean(_diodeDgv.Rows[i].Cells[3].Value);
                diodes[i].Inv  = Convert.ToBoolean(_diodeDgv.Rows[i].Cells[4].Value);
            }
            _config.Diodes = diodes;


            var systemDiodes = new OneStruct[SYSTEM_DIODE_MAX];

            for (int i = 0; i < _systemDiodeDgv.Rows.Count; i++)
            {
                systemDiodes[i]      = new OneStruct();
                systemDiodes[i].Port = _systemDiodeDgv.Rows[i].Cells[1].Value.ToString();
                systemDiodes[i].Pin  = _systemDiodeDgv.Rows[i].Cells[2].Value.ToString();
                systemDiodes[i].Pull = Convert.ToBoolean(_systemDiodeDgv.Rows[i].Cells[3].Value);
                systemDiodes[i].Inv  = Convert.ToBoolean(_systemDiodeDgv.Rows[i].Cells[4].Value);
                systemDiodes[i].Tip  = _systemDiodeDgv.Rows[i].Cells[5].Value.ToString();
            }
            _config.SystemDiodes = systemDiodes;



            //_moduleWritterController = _moduleWritterController.Clone();
            //_moduleWritterController.Fail += HandlerHelper.CreateActionHandler(Program.MainFormReferense, () => MessageBox.Show("Ошибка. Конфигурация не записана в устройство"));

            var aer = _config.ToBytes(); //File.ReadAllBytes(fileName);

            Common.SwapArrayItems(ref aer);
            _moduleWritterController.Data = aer;
            try
            {
                await _moduleWritterController.StartSaveForAnotherMemmoryType(_progress);

                MessageBox.Show("Файл успешно записан");
            }
            catch (Exception exception)
            {
                MessageErrorBox me = new MessageErrorBox(exception.Message, "Ошибка.Конфигурация не записана в устройство");
                me.ShowErrorMessageForm();
            }
        }