示例#1
0
 public static void ToggleNoSignalPopup(bool enabled, byte[] firmware, Firmware detectedFirmware)
 {
     if (enabled)
     {
         firmware[detectedFirmware.NoSignalOffset] = 0x12; // LCALL
     }
     else
     {
         firmware[detectedFirmware.NoSignalOffset] = 0x22; // RET
     }
 }
示例#2
0
 public static void ToggleHdmiPopup(bool enabled, byte[] firmware, Firmware detectedFirmware)
 {
     if (enabled)
     {
         firmware[detectedFirmware.ShowNoteOffset] = 0xE4; // CLR A
     }
     else
     {
         firmware[detectedFirmware.ShowNoteOffset] = 0x22; // RET
     }
 }
示例#3
0
        public static Firmware DetectFirmware(byte[] firmware)
        {
            Firmware detectedFirmware = null;

            foreach (Firmware fw in Firmware.KnownFirmwares)
            {
                if (fw.CheckHash(firmware))
                {
                    detectedFirmware = fw;
                    break;
                }
            }

            return(detectedFirmware);
        }
示例#4
0
        public static void ReplaceHdmiPopup(string hdmiReplacement, byte[] firmware, Firmware detectedFirmware)
        {
            int offset = 0;

            foreach (char chr in hdmiReplacement)
            {
                byte[] bytes = _osdCharacters[chr];

                foreach (byte b in bytes)
                {
                    firmware[detectedFirmware.HdmiStringOffset + offset] = b;
                    offset++;
                }
            }

            firmware[detectedFirmware.HdmiStringOffset + offset] = 0x00;
        }
示例#5
0
        public static void ChangeBackgroundColor(Color color, byte[] firmware, Firmware detectedFirmware)
        {
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x1D] = 0x7D; // MOV R5
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x1E] = color.R;
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x1F] = 0x00; // NOP

            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x23] = 0x7D; // MOV R5
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x24] = color.G;
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x25] = 0x00; // NOP

            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x29] = 0x7D; // MOV R5
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x2A] = color.B;
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x2B] = 0x00; // NOP
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x2C] = 0x00; // NOP
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x2D] = 0x00; // NOP

            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x3C] = 0x00; // NOP
            firmware[detectedFirmware.AdjustBackgroundColorOffset + 0x3D] = 0x00; // NOP
        }
示例#6
0
        public static bool ChangeLogo(string logoFileName, byte[] firmware, Firmware detectedFirmware, out string error)
        {
            error = string.Empty;

            FontCoder logo = new FontCoder(FontCoder.FontWidthKedei, FontCoder.FontHeightKedei);

            if (!logo.LoadImage(logoFileName))
            {
                error = $"Error! Cannot load logo from \"{logoFileName}\".";
                return(false);
            }

            byte[] logoBytes = logo.Encode();

            if (logoBytes.Length > detectedFirmware.MaxLogoLength)
            {
                error = "Error! Encoded logo is too long and would overwrite other firmware parts.";
                return(false);
            }

            Array.Copy(logoBytes, 0, firmware, detectedFirmware.LogoOffset, logoBytes.Length);

            return(true);
        }
示例#7
0
 public static void ChangeLogoForegroundColor(Color color, byte[] firmware, Firmware detectedFirmware)
 {
     firmware[detectedFirmware.PaletteOffset + 12] = color.R;
     firmware[detectedFirmware.PaletteOffset + 13] = color.G;
     firmware[detectedFirmware.PaletteOffset + 14] = color.B;
 }