Beispiel #1
0
        private bool CheckDup(RegisterEntry new_entry)
        {
            int    addr_new = new_entry.GetAddress();
            string name_new = new_entry.GetName();

            foreach (RegisterEntry item in RegList)
            {
                if (item.GetIsComment() || item == new_entry)
                {
                    continue;
                }
                if (item.GetName().Equals(name_new))
                {
                    new_entry.SetReason("Name " + name_new + " is already in the list at address " + item.GetAddress().ToString());
                    new_entry.SetValid(false);
                    return(false);
                }
                if (item.GetAddress() == addr_new)
                {
                    new_entry.SetReason("Address " + addr_new + " is already in the list at register " + item.GetName());
                    new_entry.SetValid(false);
                    return(false);
                }
            }
            return(true);
        }
        public static bool ValidEntry(RegisterEntry entry)
        {
            if (entry.GetIsComment())
            {
                return(true);
            }
            bool b = true;

            if (!entry.IsValidAddress())
            {
                entry.SetReason("The register " + entry.GetName() + " has invalid address: " + entry.GetAddress());
                entry.SetValid(false);
                b = false;
            }
            if (!entry.IsValidMAIS())
            {
                entry.SetReason("The register " + entry.GetName() + " has invalid MAIS field: " + entry.GetMAIS());
                entry.SetValid(false);
                b = false;
            }
            if (!entry.IsValidLSB())
            {
                entry.SetReason("The register " + entry.GetName() + "(" + entry.GetAddress() + ") has LSB out of range [0, 32)");
                entry.SetValid(false);
                b = false;
            }
            if (!entry.IsValidLSB())
            {
                entry.SetReason("The register " + entry.GetName() + "(" + entry.GetAddress() + ") has MSB out of range [0, 32)");
                entry.SetValid(false);
                b = false;
            }
            if (!entry.IsValidLsbMsb())
            {
                entry.SetReason("The register " + entry.GetName() + "(" + entry.GetAddress() + ") has MSB < LSB");
                entry.SetValid(false);
                b = false;
            }
            return(b);
        }
Beispiel #3
0
        private void TreeGridView1_SelectionChanged(object sender, EventArgs e)
        {
            RegisterEntry re = null;

            foreach (TreeGridNode item in treeGridView1.SelectedRows)
            {
                try
                {
                    re = RegList[(int)item.Cells["IndexColumn"].Value];
                    int index = (int)item.Cells["SecondaryIndexColumn"].Value;
                    if (index != -1)
                    {
                        re = re.GetFields()[index];
                        //MessageBox.Show(re.GetIndex().ToString() + ", " + index);
                    }
                    else
                    {
                        //MessageBox.Show(re.GetIndex().ToString());
                    }
                    break;
                }
                catch (NullReferenceException)
                {
                    //do nothing for groups
                    return;
                }
            }
            if (re != null)
            {
                RegNameText.Text = re.GetName();
                CommentText.Text = re.GetComment();
                InitText.Text    = re.GetInit();
                int index = LSBOpts.FindStringExact(re.GetLSB().ToString());
                if (index == -1)
                {
                    index = 0;
                }
                LSBOpts.SelectedIndex = index;
                index = LSBOpts.FindStringExact(re.GetLSB().ToString());
                if (index == -1)
                {
                    index = 0;
                }
                LSBOpts.SelectedIndex = index;
                index = MSBOpts.FindStringExact(re.GetMSB().ToString());
                if (index == -1)
                {
                    index = 31;
                }
                MSBOpts.SelectedIndex = index;
                index = MAISOpts.FindStringExact(re.GetMAIS().ToString());
                if (index == -1)
                {
                    index = 0;
                }
                MAISOpts.SelectedIndex = index;
                index = TypeOpts.FindStringExact(re.GetRegType().ToString());
                if (index == -1)
                {
                    index = 0;
                }
                TypeOpts.SelectedIndex = index;
                index = FPGAOpts.FindStringExact(re.GetFPGA().ToString());
                if (index == -1)
                {
                    index = 0;
                }
                FPGAOpts.SelectedIndex     = index;
                RegGroupOpts.SelectedIndex = RegGroupOpts.FindStringExact(re.GetGroup());

                if (re.GetIsComment())
                {
                    ErrorMessage.Text = "";
                }
                else if (!re.GetValid())
                {
                    ErrorMessage.Text = re.GetReason();
                }
                else
                {
                    ErrorMessage.Text = "";
                }
            }
        }
Beispiel #4
0
        /* Edit a register */
        private void Load_Click(object sender, EventArgs e)
        {
            RegisterEntry re   = null;
            TreeGridNode  node = null;

            foreach (TreeGridNode item in treeGridView1.SelectedRows)
            {
                try
                {
                    re = RegList[(int)item.Cells["IndexColumn"].Value];
                    int index = (int)item.Cells["SecondaryIndexColumn"].Value;
                    if (index != -1)
                    {
                        re = re.GetFields()[index];
                    }
                    node = item;
                    break;
                }
                catch (NullReferenceException)
                {
                    //do nothing for groups
                    return;
                }
            }
            if (re == null)
            {
                MessageBox.Show("Please select a register in order to edit");
                return;
            }
            string name = RegNameText.Text;

            if (!re.GetName().Equals(name))
            {
                MessageBox.Show("You can't edit a register's name");
                RegNameText.Text = re.GetName();
                return;
            }
            string        mais    = MAISOpts.Text;
            string        lsb     = LSBOpts.Text;
            string        msb     = MSBOpts.Text;
            string        type    = TypeOpts.Text;
            string        fpga    = FPGAOpts.Text;
            string        init    = InitText.Text;
            string        comment = CommentText.Text;
            string        group   = RegGroupOpts.Text;
            RegisterEntry entry;
            int           i = re.GetIndex(), j = re.GetSecondaryIndex();

            if (i == -1)
            {
                MessageBox.Show("No such register " + name);
                InitFields();
                return;
            }
            entry = RegList[i];
            if (j != -1)
            {
                entry = entry.GetFields()[j];
            }
            if (entry.GetIsComment())
            {
                MessageBox.Show("This register is a comment and can't be edited");
                //InitFields();
                return;
            }
            Enum.TryParse(type, out RegisterEntry.type_field t);
            RegisterEntry.type_field s = entry.GetRegType();
            if ((s == RegisterEntry.type_field.FIELD && t != RegisterEntry.type_field.FIELD) ||
                s != RegisterEntry.type_field.FIELD && t == RegisterEntry.type_field.FIELD)
            {
                MessageBox.Show("Can't edit a field or create one using Load");
                TypeOpts.SelectedIndex = (int)s;
                return;
            }
            if (!RegisterEntry.IsValidLsbMsb(msb, lsb))
            {
                MessageBox.Show("Can't edit an entry to have LSB > MSB");
                //InitFields();
                return;
            }
            Enum.TryParse(fpga, out RegisterEntry.fpga_field r);
            entry.EditRegister(mais, lsb, msb, t, r, init, comment, group);
            OpenValidation();
            UpdateDataBase();
            EditCell(node, entry.GetTableEntry());
        }
Beispiel #5
0
        /* Check the a register can be added to the chart */
        private bool InputValidation(RegisterEntry entry)
        {
            if (entry.GetName()[0] >= '0' && entry.GetName()[0] <= '9')
            {
                MessageBox.Show("Register name can't begin with a digit");
                return(false);
            }
            if (entry.GetRegType() != RegisterEntry.type_field.FIELD)
            {
                int index = -1;
                for (int i = 0; i < RegList.Count; i++)
                {
                    if (RegList[i].GetName().Equals(entry.GetName()))
                    {
                        index = i;
                    }
                }
                if (index != -1)
                {
                    MessageBox.Show("Register " + entry.GetName() + " (" + RegList[index].GetAddress() + ") is already in the list");
                    return(false);
                }
                int addr = FindAddress();
                if (addr == -1)
                {
                    MessageBox.Show("Unable to add register " + entry.GetName() + ", no free slot in memory");
                    return(false);
                }
                entry.SetAddress(addr);
            }
            else
            {
                if (RegList.Count == 0)
                {
                    MessageBox.Show("There are no registers in the list");
                    return(false);
                }
                int           addr = -1, index = -1;
                RegisterEntry item;
                using (ChooseAddressPrompt prompt = new ChooseAddressPrompt(RegList.ToArray()))
                {
                    if (prompt.ShowDialog() == DialogResult.OK)
                    {
                        addr  = prompt.Chosen_address;
                        index = prompt.Index;
                        item  = RegList[prompt.Index];
                    }
                    else
                    {
                        return(false);
                    }
                }
                List <RegisterEntry> fields = item.GetFields();
                foreach (RegisterEntry field in fields)
                {
                    if (field.GetName().Equals(entry.GetName()))
                    {
                        MessageBox.Show("Field " + entry.GetName() + " (" + item.GetAddress() + ") is already in the list of " + item.GetName());
                        return(false);
                    }
                }
                entry.SetAddress(addr);
                entry.SetIndex(index);
            }

            if (!entry.IsValidLsbMsb())
            {
                MessageBox.Show("Can't insert register " + entry.GetName() + " with LSB greater than MSB");
                return(false);
            }
            return(true);
        }