Пример #1
0
    public void readCodeplug()
    {
        int num  = 0;
        int num2 = 0;
        int num3 = 0;
        int num4 = 0;

        byte[]          array           = new byte[Class15.EEROM_SPACE];
        byte[]          array2          = new byte[160];
        List <int>      list            = new List <int>();
        List <int>      list2           = new List <int>();
        int             num5            = 0;
        int             num6            = 0;
        int             i               = 0;
        int             num7            = 0;
        int             num8            = 0;
        int             num9            = 0;
        int             num10           = 0;
        bool            flag            = false;
        float           num11           = 0f;
        int             num12           = 0;
        SpecifiedDevice specifiedDevice = null;

        try
        {
            specifiedDevice = SpecifiedDevice.FindSpecifiedDevice(HID_VID, HID_PID);            //0x152A HID_PID
            if (specifiedDevice == null)
            {
                if (this.OnFirmwareUpdateProgress != null)
                {
                    this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(0f, Class15.SZ_DEVICE_NOT_FOUND, true, true));
                }
            }
            else
            {
                while (true)
                {
                    Array.Clear(array2, 0, array2.Length);
                    specifiedDevice.SendData(Class19.CMD_PRG);
                    specifiedDevice.ReceiveData(array2);
                    if (array2[0] != Class19.CMD_ACK[0])
                    {
                        break;
                    }
                    specifiedDevice.SendData(Class19.CMD_PRG2);
                    Array.Clear(array2, 0, array2.Length);
                    specifiedDevice.ReceiveData(array2);
                    byte[] array3 = new byte[8];
                    Buffer.BlockCopy(array2, 0, array3, 0, 8);
                    if (array3.smethod_4(Class15.CUR_MODEL))
                    {
                        specifiedDevice.SendData(Class19.CMD_ACK);
                        Array.Clear(array2, 0, array2.Length);
                        specifiedDevice.ReceiveData(array2);
                        if (array2[0] == Class19.CMD_ACK[0])
                        {
                            if (!flag && Class15.CUR_PWD != "DT8168")
                            {
                                i    = Class15.ADDR_PWD;
                                num5 = 8;
                                byte[] data = new byte[4]
                                {
                                    82,
                                    (byte)(i >> 8),
                                    (byte)i,
                                    8
                                };
                                Array.Clear(array2, 0, array2.Length);
                                specifiedDevice.SendData(data, 0, 4);
                                specifiedDevice.ReceiveData(array2);
                                string text = "";
                                for (num = 0; num < 8; num++)
                                {
                                    char c = Convert.ToChar(array2[num + 4]);
                                    if ("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\b".IndexOf(c) < 0)
                                    {
                                        break;
                                    }
                                    text += c;
                                }
                                if (string.IsNullOrEmpty(text))
                                {
                                    Array.Clear(array2, 0, array2.Length);
                                    specifiedDevice.SendData(Class19.CMD_ENDR);
                                    specifiedDevice.ReceiveData(array2);
                                    if (array2[0] != Class19.CMD_ACK[0])
                                    {
                                        break;
                                    }
                                    flag = true;
                                }
                                else
                                {
                                    if (text != Class15.CUR_PWD)
                                    {
                                        Array.Clear(array2, 0, array2.Length);
                                        specifiedDevice.SendData(Class19.CMD_ENDR);
                                        specifiedDevice.ReceiveData(array2);
                                        if (array2[0] != Class19.CMD_ACK[0])
                                        {
                                            break;
                                        }
                                        Class15.CUR_PWD = "";
                                        PasswordForm passwordForm = new PasswordForm();
                                        if (passwordForm.ShowDialog() == DialogResult.OK)
                                        {
                                            num12++;
                                            if (num12 < 3)
                                            {
                                                continue;
                                            }
                                            this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(0f, "Password error more than three times, quit communication!", true, true));
                                        }
                                        else
                                        {
                                            this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(0f, "", true, true));
                                        }
                                        return;
                                    }
                                    Array.Clear(array2, 0, array2.Length);
                                    specifiedDevice.SendData(Class19.CMD_ENDR);
                                    specifiedDevice.ReceiveData(array2);
                                    if (array2[0] != Class19.CMD_ACK[0])
                                    {
                                        break;
                                    }
                                    flag = true;
                                }
                                continue;
                            }
                            List <int> list3 = new List <int>();
                            List <int> list4 = new List <int>();
                            list3.Add(Class15.ADDR_CHANNEL);
                            list4.Add(Class15.ADDR_CHANNEL + 16);
                            for (num2 = 1; num2 < 8; num2++)
                            {
                                num8 = Class15.ADDR_EX_CH + (num2 - 1) * ChannelForm.SPACE_CH_GROUP;
                                list3.Add(num8);
                                list4.Add(num8 + 16);
                            }
                            num8 = Class15.ADDR_EX_ZONE_LIST;
                            list3.Add(num8);
                            list4.Add(num8 + 32);
                            num3 = 0;
                            num4 = 0;
                            for (num = 0; num < list3.Count; num++)
                            {
                                num9  = list3[num];
                                num10 = list4[num];
                                for (i = num9; i < num10; i += num5)
                                {
                                    num6 = i % 32;
                                    num5 = ((i + 32 <= num10) ? (32 - num6) : (num10 - i));
                                    num4++;
                                }
                            }
                            num8 = 0;
                            num  = 0;
                            while (true)
                            {
                                if (num < list3.Count)
                                {
                                    num9  = list3[num];
                                    num10 = list4[num];
                                    i     = num9;
                                    while (i < num10)
                                    {
                                        if (!this.method_0())
                                        {
                                            if (num8 >> 16 != i >> 16)
                                            {
                                                byte[] array4 = new byte[8]
                                                {
                                                    67,
                                                    87,
                                                    66,
                                                    4,
                                                    0,
                                                    0,
                                                    0,
                                                    0
                                                };
                                                num8      = i >> 16 << 16;
                                                array4[4] = (byte)(num8 >> 24);
                                                array4[5] = (byte)(num8 >> 16);
                                                array4[6] = (byte)(num8 >> 8);
                                                array4[7] = (byte)num8;
                                                Array.Clear(array2, 0, array2.Length);
                                                specifiedDevice.SendData(array4, 0, array4.Length);
                                                specifiedDevice.ReceiveData(array2);
                                                if (array2[0] != Class19.CMD_ACK[0])
                                                {
                                                    goto end_IL_02a2;
                                                }
                                            }
                                            num6 = i % 32;
                                            num5 = ((i + 32 <= num10) ? (32 - num6) : (num10 - i));
                                            num7 = i - num8;
                                            byte[] data2 = new byte[4]
                                            {
                                                82,
                                                (byte)(num7 >> 8),
                                                (byte)num7,
                                                (byte)num5
                                            };
                                            Array.Clear(array2, 0, array2.Length);
                                            specifiedDevice.SendData(data2, 0, 4);
                                            if (!specifiedDevice.ReceiveData(array2))
                                            {
                                                goto end_IL_02a2;
                                            }
                                            Array.Copy(array2, 4, array, i, num5);
                                            if (this.OnFirmwareUpdateProgress != null)
                                            {
                                                this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs((float)(++num3) * 5f / (float)num4, i.ToString(), false, false));
                                            }
                                            i += num5;
                                            continue;
                                        }
                                        specifiedDevice.SendData(Class19.CMD_ENDR);
                                        specifiedDevice.ReceiveData(array2);
                                        return;
                                    }
                                    num++;
                                    continue;
                                }
                                byte[] array5 = new byte[16];
                                Array.Copy(array, Class15.ADDR_CHANNEL, array5, 0, array5.Length);
                                BitArray bitArray = new BitArray(array5);
                                list.Add(Class15.ADDR_CHANNEL);
                                list2.Add(Class15.ADDR_CHANNEL + 16);
                                for (num = 0; num < 128; num++)
                                {
                                    if (bitArray[num])
                                    {
                                        num9  = Class15.ADDR_CHANNEL + 16 + num * ChannelForm.SPACE_CH;
                                        num10 = num9 + ChannelForm.SPACE_CH;
                                        list.Add(num9);
                                        list2.Add(num10);
                                    }
                                }
                                for (num2 = 1; num2 < 8; num2++)
                                {
                                    num8 = Class15.ADDR_EX_CH + (num2 - 1) * ChannelForm.SPACE_CH_GROUP;
                                    Array.Copy(array, num8, array5, 0, array5.Length);
                                    bitArray = new BitArray(array5);
                                    list.Add(num8);
                                    list2.Add(num8 + 16);
                                    for (num = 0; num < 128; num++)
                                    {
                                        if (bitArray[num])
                                        {
                                            num9  = num8 + 16 + num * ChannelForm.SPACE_CH;
                                            num10 = num9 + ChannelForm.SPACE_CH;
                                            list.Add(num9);
                                            list2.Add(num10);
                                        }
                                    }
                                }
                                byte[] array6 = new byte[32];
                                num8 = Class15.ADDR_EX_ZONE_LIST;
                                Array.Copy(array, num8, array6, 0, array6.Length);
                                bitArray = new BitArray(array6);
                                list.Add(num8);
                                list2.Add(num8 + 32);
                                for (num = 0; num < 250; num++)
                                {
                                    num8 = Class15.ADDR_EX_ZONE_LIST + 32;
                                    if (bitArray[num])
                                    {
                                        num9  = num8 + num * ZoneForm.SPACE_ZONE;
                                        num10 = num9 + ZoneForm.SPACE_ZONE;
                                        list.Add(num9);
                                        list2.Add(num10);
                                    }
                                }
                                for (num = 0; num < this.START_ADDR.Length; num++)
                                {
                                    list.Add(this.START_ADDR[num]);
                                    list2.Add(this.END_ADDR[num]);
                                }
                                num3 = 0;
                                num4 = 0;
                                for (num = 0; num < list.Count; num++)
                                {
                                    num9  = list[num];
                                    num10 = list2[num];
                                    for (i = num9; i < num10; i += num5)
                                    {
                                        num6 = i % 32;
                                        num5 = ((i + 32 <= num10) ? (32 - num6) : (num10 - i));
                                        num4++;
                                    }
                                }
                                num8 = 0;
                                num  = 0;
                                while (true)
                                {
                                    if (num < list.Count)
                                    {
                                        num9  = list[num];
                                        num10 = list2[num];
                                        i     = num9;
                                        while (i < num10)
                                        {
                                            if (!this.method_0())
                                            {
                                                if (num8 >> 16 != i >> 16)
                                                {
                                                    byte[] array7 = new byte[8]
                                                    {
                                                        67,
                                                        87,
                                                        66,
                                                        4,
                                                        0,
                                                        0,
                                                        0,
                                                        0
                                                    };
                                                    num8      = i >> 16 << 16;
                                                    array7[4] = (byte)(num8 >> 24);
                                                    array7[5] = (byte)(num8 >> 16);
                                                    array7[6] = (byte)(num8 >> 8);
                                                    array7[7] = (byte)num8;
                                                    Array.Clear(array2, 0, array2.Length);
                                                    specifiedDevice.SendData(array7, 0, array7.Length);
                                                    specifiedDevice.ReceiveData(array2);
                                                    if (array2[0] == Class19.CMD_ACK[0])
                                                    {
                                                        goto IL_08b4;
                                                    }
                                                    goto IL_0a1f;
                                                }
                                                goto IL_08b4;
                                            }
                                            specifiedDevice.SendData(Class19.CMD_ENDR);
                                            specifiedDevice.ReceiveData(array2);
                                            return;

IL_08b4:
                                            num6 = i % 32;
                                            num5 = ((i + 32 <= num10) ? (32 - num6) : (num10 - i));
                                            num7 = i - num8;
                                            byte[] array8 = new byte[4]
                                            {
                                                82,
                                                (byte)(num7 >> 8),
                                                (byte)num7,
                                                (byte)num5
                                            };
                                            Array.Clear(array2, 0, array2.Length);
                                            specifiedDevice.SendData(array8, 0, 4);
                                            if (specifiedDevice.ReceiveData(array2))
                                            {
                                                if (Class15.smethod_18(array8, array2, 4))
                                                {
                                                    Array.Copy(array2, 4, array, i, num5);
                                                    if (this.OnFirmwareUpdateProgress != null)
                                                    {
                                                        num11 = 5f + (float)(++num3) * 95f / (float)num4;
                                                        this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(num11, i.ToString(), false, false));
                                                    }
                                                    i += num5;
                                                    continue;
                                                }
                                                goto IL_0a51;
                                            }
                                            goto IL_0a38;
                                        }
                                        num++;
                                        continue;
                                    }
                                    Array.Clear(array2, 0, array2.Length);
                                    specifiedDevice.SendData(Class19.CMD_ENDR);
                                    specifiedDevice.ReceiveData(array2);
                                    if (array2[0] != Class19.CMD_ACK[0])
                                    {
                                        break;
                                    }
                                    MainForm.ByteToData(array);
                                    if (this.OnFirmwareUpdateProgress != null)
                                    {
                                        this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(100f, "", false, true));
                                    }
                                    return;

IL_0a51:
                                    specifiedDevice.SendData(Class19.CMD_ENDR);
                                    specifiedDevice.ReceiveData(array2);
                                    break;
IL_0a38:
                                    specifiedDevice.SendData(Class19.CMD_ENDR);
                                    specifiedDevice.ReceiveData(array2);
                                    break;
IL_0a1f:
                                    specifiedDevice.SendData(Class19.CMD_ENDR);
                                    specifiedDevice.ReceiveData(array2);
                                    break;
                                }
                                break;
                            }
                        }
                        break;
                    }
                    if (this.OnFirmwareUpdateProgress != null)
                    {
                        this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(0f, Class15.SZ_MODEL_NOT_MATCH, true, true));
                    }
                    return;

                    continue;                    // Roger Clark. There is a known compiler warning here. This may be an artifact caused by the decompiler
end_IL_02a2:
                    break;
                }
                if (this.OnFirmwareUpdateProgress != null)
                {
                    this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(0f, Class15.SZ_COMM_ERROR, true, true));
                }
            }
        }
        catch (TimeoutException ex)
        {
            Console.WriteLine(ex.Message);
            if (this.OnFirmwareUpdateProgress != null)
            {
                this.OnFirmwareUpdateProgress(this, new FirmwareUpdateProgressEventArgs(0f, Class15.SZ_COMM_ERROR, false, false));
            }
        }
        finally
        {
            if (specifiedDevice != null)
            {
                specifiedDevice.Dispose();
            }
        }
    }