imBMW.iBus.Devices.Real.BodyModule.ProcessGMMessage C# (CSharp) Method

ProcessGMMessage() static private method

static private ProcessGMMessage ( Message m ) : void
m Message
return void
        static void ProcessGMMessage(Message m)
        {
            if (m.Data.Length == 2 && m.Data[0] == 0x72)
            {
                var btn = m.Data[1];
                if (btn.HasBit(4)) // 0x1_
                {
                    OnRemoteKeyButton(m, RemoteKeyButton.Lock);
                }
                else if (btn.HasBit(5)) // 0x2_
                {
                    OnRemoteKeyButton(m, RemoteKeyButton.Unlock);
                }
                else if (btn.HasBit(6)) // 0x4_
                {
                    OnRemoteKeyButton(m, RemoteKeyButton.Trunk);
                }
            }
            else if (m.Data.Length == 3 && m.Data[0] == 0x7A)
            {
                // Data[1] = 7654 3210. 7 = ??, 6 = light, 5 = lock, 4 = unlock, 5+4 = hard lock,
                //      doors statuses: 0 = left front (driver), 1 = right front, 2 = left rear, 3 = right rear.
                // Car could have locked status even after doors are opened!
                // Data[2] = 7654 3210. 5 = trunk.
                isCarLocked = m.Data[1].HasBit(5);
                if (isCarLocked)
                {
                    if (m.Data[1].HasBit(0))
                    {
                        wasDriverDoorOpened = true;
                    }
                }
                else
                {
                    wasDriverDoorOpened = false;
                }
            }
            else if (m.Data.Length > 3 && m.Data[0] == 0xA0)
            {
                // TODO filter not analog-values responses
                var voltage = ((double)m.Data[1]) / 10 + ((double)m.Data[2]) / 1000;

                m.ReceiverDescription = "Analog values. Battery voltage = " + voltage + "V";
                BatteryVoltage = voltage;
            }
        }