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;
}
}