Ejemplo n.º 1
0
        public static Page GetPage(string name)
        {
            var selectedPage = menuDictionary.SingleOrDefault(r => r.Key == name).Value;

            if (selectedPage == null)
            {
                Page newPage = null;
                switch (name)
                {
                case "Resistance":
                    newPage = new ResistancePage();
                    break;

                case "Bank":
                    newPage = new BankPage();
                    break;

                case "Mode":
                    newPage = new ModePage();
                    break;

                case "TestMeasure":
                    newPage = new TestMeasurePage();
                    break;

                case "OutContact":
                    newPage = new OutContactPage();
                    break;

                case "VoltagePhaseCompensation":
                    newPage = new VoltagePhaseCompensationPage();
                    break;

                default:
                    break;
                }
                menuDictionary.Add(name, newPage);
                selectedPage = newPage;
            }

            return(selectedPage);
        }
Ejemplo n.º 2
0
        public static DecodedMode?DecodeMode10(byte[] modeResponse, PeripheralDeviceTypes deviceType)
        {
            ModeHeader?hdr = DecodeModeHeader10(modeResponse, deviceType);

            if (!hdr.HasValue)
            {
                return(null);
            }

            DecodedMode decoded = new DecodedMode {
                Header = hdr.Value
            };
            bool longlba = (modeResponse[4] & 0x01) == 0x01;
            int  offset;
            int  blkDrLength = 0;

            if (decoded.Header.BlockDescriptors != null)
            {
                blkDrLength = decoded.Header.BlockDescriptors.Length;
            }

            if (longlba)
            {
                offset = 8 + blkDrLength * 16;
            }
            else
            {
                offset = 8 + blkDrLength * 8;
            }
            int length = modeResponse[0] << 8;

            length += modeResponse[1];
            length += 2;

            if (length != modeResponse.Length)
            {
                return(decoded);
            }

            List <ModePage> listpages = new List <ModePage>();

            while (offset < modeResponse.Length)
            {
                bool     isSubpage = (modeResponse[offset] & 0x40) == 0x40;
                ModePage pg        = new ModePage();
                byte     pageNo    = (byte)(modeResponse[offset] & 0x3F);

                if (pageNo == 0)
                {
                    pg.PageResponse = new byte[modeResponse.Length - offset];
                    Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
                    pg.Page    = 0;
                    pg.Subpage = 0;
                    offset    += pg.PageResponse.Length;
                }
                else
                {
                    if (isSubpage)
                    {
                        pg.PageResponse = new byte[(modeResponse[offset + 2] << 8) + modeResponse[offset + 3] + 4];

                        if (pg.PageResponse.Length + offset > modeResponse.Length)
                        {
                            return(decoded);
                        }

                        Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
                        pg.Page    = (byte)(modeResponse[offset] & 0x3F);
                        pg.Subpage = modeResponse[offset + 1];
                        offset    += pg.PageResponse.Length;
                    }
                    else
                    {
                        pg.PageResponse = new byte[modeResponse[offset + 1] + 2];

                        if (pg.PageResponse.Length + offset > modeResponse.Length)
                        {
                            return(decoded);
                        }

                        Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
                        pg.Page    = (byte)(modeResponse[offset] & 0x3F);
                        pg.Subpage = 0;
                        offset    += pg.PageResponse.Length;
                    }
                }

                listpages.Add(pg);
            }

            decoded.Pages = listpages.ToArray();

            return(decoded);
        }
Ejemplo n.º 3
0
        public static DecodedMode?DecodeMode6(byte[] modeResponse, PeripheralDeviceTypes deviceType)
        {
            ModeHeader?hdr = DecodeModeHeader6(modeResponse, deviceType);

            if (!hdr.HasValue)
            {
                return(null);
            }

            var decoded = new DecodedMode
            {
                Header = hdr.Value
            };

            int blkDrLength = 0;

            if (decoded.Header.BlockDescriptors != null)
            {
                blkDrLength = decoded.Header.BlockDescriptors.Length;
            }

            int offset = 4 + (blkDrLength * 8);
            int length = modeResponse[0] + 1;

            if (length != modeResponse.Length)
            {
                return(decoded);
            }

            List <ModePage> listpages = new List <ModePage>();

            while (offset < modeResponse.Length)
            {
                bool isSubpage = (modeResponse[offset] & 0x40) == 0x40;
                var  pg        = new ModePage();
                byte pageNo    = (byte)(modeResponse[offset] & 0x3F);

                if (pageNo == 0)
                {
                    pg.PageResponse = new byte[modeResponse.Length - offset];
                    Array.Copy(modeResponse, offset, pg.PageResponse, 0, pg.PageResponse.Length);
                    pg.Page    = 0;
                    pg.Subpage = 0;
                    offset    += pg.PageResponse.Length;
                }
                else
                {
                    if (isSubpage)
                    {
                        if (offset + 3 >= modeResponse.Length)
                        {
                            break;
                        }

                        pg.PageResponse = new byte[(modeResponse[offset + 2] << 8) + modeResponse[offset + 3] + 4];
                        int copyLen = pg.PageResponse.Length;

                        if (pg.PageResponse.Length + offset > modeResponse.Length)
                        {
                            copyLen = modeResponse.Length - offset;
                        }

                        Array.Copy(modeResponse, offset, pg.PageResponse, 0, copyLen);
                        pg.Page    = (byte)(modeResponse[offset] & 0x3F);
                        pg.Subpage = modeResponse[offset + 1];
                        offset    += pg.PageResponse.Length;
                    }
                    else
                    {
                        if (offset + 1 >= modeResponse.Length)
                        {
                            break;
                        }

                        pg.PageResponse = new byte[modeResponse[offset + 1] + 2];
                        int copyLen = pg.PageResponse.Length;

                        if (pg.PageResponse.Length + offset > modeResponse.Length)
                        {
                            copyLen = modeResponse.Length - offset;
                        }

                        Array.Copy(modeResponse, offset, pg.PageResponse, 0, copyLen);
                        pg.Page    = (byte)(modeResponse[offset] & 0x3F);
                        pg.Subpage = 0;
                        offset    += pg.PageResponse.Length;
                    }
                }

                listpages.Add(pg);
            }

            decoded.Pages = listpages.ToArray();

            return(decoded);
        }