imBMW.iBus.Devices.Real.BordmonitorText.ParseItems C# (CSharp) Method

ParseItems() public method

public ParseItems ( ) : imBMW.iBus.Devices.Real.BordmonitorText[]
return imBMW.iBus.Devices.Real.BordmonitorText[]
        public BordmonitorText[] ParseItems()
        {
            if (items != null)
            {
                return items;
            }

            if (Field != BordmonitorFields.Item)
            {
                throw new Exception("Wrong Field type.");
            }

            #if NETMF
            var res = new System.Collections.ArrayList();
            #else
            var res = new System.Collections.Generic.List<BordmonitorText>();
            #endif

            if (Data.Length > 3)
            {
                var index = (byte)(Data[3] & 0x0F);
                bool isChecked = false;
                var offset = 4;
                for (int i = offset; i < Data.Length; i++)
                {
                    var isNext = Data[i] == 0x06;
                    var isLast = i == Data.Length - 1;
                    if (isNext || isLast)
                    {
                        if (!isNext)
                        {
                            isChecked = Data[i] == 0x2A;
                        }
                        var s = ASCIIEncoding.GetString(Data, offset, i - offset + (isNext ? 0 : 1) - (isChecked ? 1 : 0), false).Trim().ASCIIToUTF8();
                        res.Add(new BordmonitorText(Field, s, index, isChecked));
                        index++;
                        if (isNext && isLast)
                        {
                            res.Add(new BordmonitorText(Field, "", index, false));
                        }
                        offset = i + 1;
                        continue;
                    }
                    isChecked = Data[i] == 0x2A;
                }
            }

            #if NETMF
            items = (BordmonitorText[])res.ToArray(typeof(BordmonitorText));
            #else
            items = res.ToArray();
            #endif
            return items;
        }

Usage Example

Exemplo n.º 1
0
        static void ProcessNavGraphicsMessage(Message m)
        {
            var ae = ScreenCleared;
            if (ae != null && m.Data.Compare(MessageClearScreen.Data))
            {
                ae();
                m.ReceiverDescription = "Clear screen";
                return;
            }

            ae = ScreenRefreshed;
            if (ae != null && m.Data.Compare(MessageRefreshScreen.Data))
            {
                ae();
                m.ReceiverDescription = "Refresh screen";
                OnScreenUpdated();
                return;
            }

            var e = TextReceived;
            if (e != null || ReplyToScreenUpdates)
            {
                if (m.Data.StartsWith(0xA5, 0x62, 0x00) || m.Data.StartsWith(0x21, 0x60, 0x00))
                {
                    var a = new BordmonitorText(BordmonitorFields.Item, m.Data);
                    if (e != null)
                    {
                        e(a);
                    }
                    #if NETMF
                    m.ReceiverDescription = "BM fill items";
                    #else
                    var s = "BM fill items";
                    var items = a.ParseItems();
                    foreach (var i in items)
                    {
                        s += " | " + i.Index.ToHex() + "." + i.Text;
                    }
                    m.ReceiverDescription = s;
                    #endif
                    OnScreenUpdated(true);
                }
                else if (m.Data.StartsWith(DataUpdateScreen))
                {
                    if (m.Data.StartsWith(DataShowStatus))
                    {
                        var a = new BordmonitorText(BordmonitorFields.Status, m.Data);
                        if (e != null)
                        {
                            e(a);
                        }
                        #if NETMF
                        m.ReceiverDescription = "BM show status";
                        #else
                        m.ReceiverDescription = "BM show status: " + a.Text;
                        #endif
                    }
                    OnScreenUpdated(false);
                }
                else if (m.Data.StartsWith(DataShowTitle))
                {
                    var a = new BordmonitorText(BordmonitorFields.Title, m.Data);
                    if (e != null)
                    {
                        e(a);
                    }
                    #if NETMF
                    m.ReceiverDescription = "BM show title";
                    #else
                    m.ReceiverDescription = "BM show title: " + a.Text;
                    #endif
                    OnScreenUpdated();
                }
            }
        }
All Usage Examples Of imBMW.iBus.Devices.Real.BordmonitorText::ParseItems