예제 #1
0
        private void DumpClusterNecRom(IKW1281Dialog kwp1281)
        {
            if (_controllerAddress != (int)ControllerAddress.Cluster)
            {
                Logger.WriteLine("Only supported for cluster");
                return;
            }

            var        dumpFileName = _filename ?? "cluster_nec_rom_dump.bin";
            const byte blockSize    = 16;

            Logger.WriteLine($"Saving cluster NEC ROM to {dumpFileName}");

            bool succeeded = true;

            using (var fs = File.Create(dumpFileName, blockSize, FileOptions.WriteThrough))
            {
                {
                    for (int address = 0; address < 65536; address += blockSize)
                    {
                        var blockBytes = kwp1281.CustomReadNecRom((ushort)address, blockSize);
                        if (blockBytes == null)
                        {
                            blockBytes = Enumerable.Repeat((byte)0, blockSize).ToList();
                            succeeded  = false;
                        }
                        else if (blockBytes.Count < blockSize)
                        {
                            blockBytes.AddRange(Enumerable.Repeat((byte)0, blockSize - blockBytes.Count));
                            succeeded = false;
                        }

                        fs.Write(blockBytes.ToArray(), 0, blockBytes.Count);
                        fs.Flush();
                    }
                }
            }

            if (!succeeded)
            {
                Logger.WriteLine();
                Logger.WriteLine("**********************************************************************");
                Logger.WriteLine("*** Warning: Some bytes could not be read and were replaced with 0 ***");
                Logger.WriteLine("**********************************************************************");
                Logger.WriteLine();
            }
        }