Exemple #1
0
        private void UnlockControllerForEepromReadWrite(IKW1281Dialog kwp1281)
        {
            switch ((ControllerAddress)_controllerAddress)
            {
            case ControllerAddress.CCM:
            case ControllerAddress.CentralLocking:
                kwp1281.Login(code: 19283, workshopCode: 222);     // This is what VDS-PRO uses
                break;

            case ControllerAddress.Cluster:
                // TODO:UnlockCluster() is only needed for EEPROM read, not memory read
                if (!VdoCluster.UnlockCluster(kwp1281))
                {
                    Logger.WriteLine("Unknown cluster software version. EEPROM access will likely fail.");
                }

                if (!ClusterRequiresSeedKey(kwp1281))
                {
                    Logger.WriteLine(
                        "Cluster is unlocked for EEPROM access. Skipping Seed/Key login.");
                    return;
                }

                ClusterSeedKeyAuthenticate(kwp1281);
                break;
            }
        }
Exemple #2
0
        private void GetSkc()
        {
            if (_controllerAddress == (int)ControllerAddress.Cluster)
            {
                var ecuInfo = Kwp1281Wakeup();
                if (ecuInfo.Text.Contains("VDO"))
                {
                    var partNumberMatch = Regex.Match(
                        ecuInfo.Text,
                        "\\b(\\d[a-zA-Z])\\d9(\\d{2})\\d{3}[a-zA-Z][a-zA-Z]?\\b");
                    if (partNumberMatch.Success)
                    {
                        var family = partNumberMatch.Groups[1].Value;

                        switch (partNumberMatch.Groups[2].Value)
                        {
                        case "19":     // Non-CAN
                            Logger.WriteLine($"Cluster is non-Immo so there is no SKC.");
                            return;

                        case "20":     // CAN
                            break;

                        default:
                            Logger.WriteLine($"Unknown cluster: {ecuInfo.Text}");
                            return;
                        }

                        const int startAddress = 0x90;
                        var       dumpFileName = DumpClusterEeprom(_kwp1281, startAddress, length: 0x7C);
                        var       buf          = File.ReadAllBytes(dumpFileName);
                        var       skc          = VdoCluster.GetSkc(buf, startAddress);
                        if (!string.IsNullOrEmpty(skc))
                        {
                            Logger.WriteLine($"SKC: {skc}");
                        }
                        else
                        {
                            Logger.WriteLine($"Unable to determine SKC.");
                        }
                    }
                    else
                    {
                        Console.WriteLine($"ECU Info: {ecuInfo.Text}");
                    }
                }
                else if (ecuInfo.Text.Contains("RB8"))
                {
                    // Need to quit KWP1281 before switching to KWP2000
                    _kwp1281.EndCommunication();
                    _kwp1281 = null;
                    Thread.Sleep(TimeSpan.FromSeconds(2));

                    var dumpFileName = DumpRB8Eeprom(
                        Kwp2000Wakeup(evenParityWakeup: true), 0x1040E, 2);
                    var buf = File.ReadAllBytes(dumpFileName);
                    var skc = Utils.GetShort(buf, 0).ToString("D5");
                    Logger.WriteLine($"SKC: {skc}");
                }
                else if (ecuInfo.Text.Contains("M73"))
                {
                    // TODO: Marelli
                    Console.WriteLine($"Unsupported cluster: {ecuInfo.Text}");
                }
                else
                {
                    Console.WriteLine($"Unsupported cluster: {ecuInfo.Text}");
                }
            }
            else if (_controllerAddress == (int)ControllerAddress.Ecu)
            {
                // 038906012GN
                Logger.WriteLine("Not supported for ECUs yet.");
            }
            else
            {
                Logger.WriteLine("Only supported for clusters (address 17) and ECUs (address 1)");
            }
        }