コード例 #1
0
        public void WriteEEPROM(BootloaderClient endpoint, MemoryMap source)
        {
            Console.CursorVisible = false;

            Console.Write("   Writing EEPROM memory ({0}kB):   ", source.Size / 1024);
            ConsoleProgressBar cpb = new ConsoleProgressBar(0, source.Size);

            for (uint addr = 0; addr < source.Size; addr += 128, cpb.Progress = addr)
            {
                byte[] payload = new byte[2 + 128];
                payload[0] = (byte)(addr & 0xFF);
                payload[1] = (byte)((addr >> 8) & 0xFF);
                source.Read(addr, payload, 2, 128);

                Message msg_write = new Message(endpoint.BootloaderAddress, MessageType.WriteEepromPage, payload);

                Message response = SendAndWaitForResponse(endpoint, msg_write, 2000);
                if (response.Type != MessageType.WriteEepromPage)
                {
                    throw new CnCException("response.Type");
                }
            }

            Console.CursorVisible = true;
            Console.WriteLine("Done.");
        }
コード例 #2
0
        public void ReadEEPROM(BootloaderClient endpoint, MemoryMap dest)
        {
            Console.CursorVisible = false;

            Console.Write("   Reading EEPROM memory ({0}kB):   ", dest.Size / 1024);
            ConsoleProgressBar cpb = new ConsoleProgressBar(0, dest.Size);

            for (uint addr = 0; addr < dest.Size; addr += 128, cpb.Progress = addr)
            {
                Message msg_readpage = new Message(endpoint.BootloaderAddress, MessageType.ReadEepromPage, new byte[] { (byte)(addr & 0xFF), (byte)(addr >> 8), });

                Message response = SendAndWaitForResponse(endpoint, msg_readpage, 2000);
                dest.Write(addr, response.Payload, 0, 128);
            }

            Console.CursorVisible = true;
            Console.WriteLine("Done.");
        }
コード例 #3
0
        public void WriteFLASH(Device endpoint, MemoryMap source)
        {
            Console.CursorVisible = false;

            Console.Write("Writing FLASH memory ({0}kB):    ", source.Size / 1024);
            ConsoleProgressBar cpb = new ConsoleProgressBar(0, source.Size);

            for (uint addr = 0; addr < source.Size; addr += 128, cpb.Progress = addr)
            {
                byte[] payload = new byte[2 + 128];
                payload[0] = (byte)(addr & 0xFF);
                payload[1] = (byte)((addr >> 8) & 0xFF);
                source.Read(addr, payload, 2, 128);

                Message msg_write = new Message((byte)endpoint.address, MessageType.WriteFlashPage, payload);

                Message response = SendAndWaitForResponse(endpoint, msg_write, 2000);
            }

            Console.CursorVisible = true;
            Console.WriteLine("Done.");
        }
コード例 #4
0
        public bool VerifyEEPROM(BootloaderClient endpoint, MemoryMap expected)
        {
            Console.CursorVisible = false;

            Console.Write("   Verifying EEPROM memory ({0}kB): ", expected.Size / 1024);
            ConsoleProgressBar cpb    = new ConsoleProgressBar(0, expected.Size);
            MemoryMap          mmread = new MemoryMap(expected.Size);

            for (uint addr = 0; addr < expected.Size; addr += 128, cpb.Progress = addr)
            {
                Message msg_readpage = new Message(endpoint.BootloaderAddress, MessageType.ReadEepromPage, new byte[] { (byte)(addr & 0xFF), (byte)(addr >> 8), });

                Message response = SendAndWaitForResponse(endpoint, msg_readpage, 2000);
                mmread.Write(addr, response.Payload, 0, 128);
            }

            UInt32 difference_address = 0;
            bool   result             = expected.BinaryCompare(mmread, ref difference_address);

            Console.CursorVisible = true;
            if (result)
            {
                Console.WriteLine("Correct.");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Failed.");
                Console.ForegroundColor = ConsoleColor.Gray;

                byte expected_byte = expected.ReadByte(difference_address);
                byte existing_byte = mmread.ReadByte(difference_address);

                throw new MemoryVerificationException("FLASH", difference_address, expected_byte, existing_byte);
            }
            return(result);
        }