internal void UpdatePIarea() { if (m_fileName == "") { return; } int checksumAreaOffset = ChecksumT8.GetChecksumAreaOffset(m_fileName); int endOfPIArea = GetEmptySpaceStartFrom(m_fileName, checksumAreaOffset); //Console.WriteLine("Area: " + checksumAreaOffset.ToString("X8") + " - " + endOfPIArea.ToString("X8")); byte[] piarea = readdatafromfile(m_fileName, checksumAreaOffset, endOfPIArea - checksumAreaOffset + 1); //Console.WriteLine("Size: " + piarea.Length.ToString()); for (int t = 0; t < piarea.Length; t++) { piarea[t] += 0xD6; piarea[t] ^= 0x21; } int i = 0; int len = 0; int type = 0; do { if (i == piarea.Length) { break; } len = Convert.ToInt32(piarea[i++]); type = Convert.ToInt32(piarea[i++]); if (len == 0xF7 && type == 0xF7) { break; } Console.WriteLine("Len: " + len.ToString("X2") + " Type = " + type.ToString("X2")); if (type == 0x92 || type == 0x97 || type == 0x0C || type == 0xC1 || type == 0x08 || type == 0x1D || type == 0x10 || type == 0x0A || type == 0x0F || type == 0x16) { for (int f = 0; f < len; f++) { switch (type) { case 0x10: piarea[i++] = Convert.ToByte(m_programmerDevice[f]); break; case 0x1D: piarea[i++] = Convert.ToByte(m_programmerName[f]); break; case 0x0A: piarea[i++] = Convert.ToByte(m_releaseDate[f]); break; case 0x08: // Disabled //piarea[i++] = Convert.ToByte(m_SoftwareVersion[f]); i++; break; case 0xC1: piarea[i++] = Convert.ToByte(m_PartNumber[f]); break; case 0x92: piarea[i++] = Convert.ToByte(m_hardwareID[f]); break; case 0x97: piarea[i++] = Convert.ToByte(m_deviceType[f]); break; } } } } while (i < piarea.Length - 1); for (int t = 0; t < piarea.Length; t++) { piarea[t] ^= 0x21; piarea[t] -= 0xD6; } savedatatobinary(checksumAreaOffset, piarea.Length, piarea, m_fileName); }
private void DecodeInfo(string filename) { if (filename == "") { return; } int checksumAreaOffset = ChecksumT8.GetChecksumAreaOffset(filename); int endOfPIArea = GetEmptySpaceStartFrom(filename, checksumAreaOffset); //logger.Debug("Area: " + checksumAreaOffset.ToString("X8") + " - " + endOfPIArea.ToString("X8")); byte[] piarea = readdatafromfile(filename, checksumAreaOffset, endOfPIArea - checksumAreaOffset + 1); //logger.Debug("Size: " + piarea.Length.ToString()); for (int t = 0; t < piarea.Length; t++) { piarea[t] += 0xD6; piarea[t] ^= 0x21; } int i = 0; int len = 0; int type = 0; do { if (i == piarea.Length) { break; } len = Convert.ToInt32(piarea[i++]); type = Convert.ToInt32(piarea[i++]); if (len == 0xF7 && type == 0xF7) { break; } //printf("\nLENGTH = %02X, TYPE = %02X, text = ", len, type); string data = string.Empty; try { for (int f = 0; f < len; f++) { if (type == 0x92 || type == 0x97 || type == 0x0C || type == 0xC1 || type == 0x08 || type == 0x1D || type == 0x10 || type == 0x0A || type == 0x0F || type == 0x16) { data += Convert.ToChar(piarea[i++]); } else { data += piarea[i++].ToString("X2"); } } } catch (Exception E) { logger.Debug(E.Message); } logger.Debug("Len: " + len.ToString("X2") + " Type = " + type.ToString("X2") + " " + data); /* * Len: 10 Type = 0D 58 C3 25 2D 92 B3 2D 82 95 E5 E4 23 15 E3 A4 55 // layer 1 checksum * Len: 09 Type = 92 GMPT 0100 //Hardware ID * Len: 14 Type = 97 ECM //Type of device * Len: 02 Type = 9A 01 08 //revision??? * Len: 01 Type = 1E 01 * Len: 03 Type = 0C 82h //version extension? * Len: 04 Type = CB 03 4F C5 10 * Len: 02 Type = DB 20 20 * Len: 08 Type = C1 55559436 * Len: 02 Type = D1 20 20 * Len: 1E Type = 08 FA5I_C_FME2_65_FIEF_82h //version? * Len: 02 Type = 95 00 04 * Len: 06 Type = 96 2D 20 20 20 20 20 * Len: 04 Type = FB 02 70 84 9B //layer2 checksum * Len: 04 Type = FC 00 0B AF 06 //CHECKSUM LAST ADDRESS * Len: 04 Type = FD 00 02 00 00 //ROM OFFSET * Len: 06 Type = 16 p50660 * Len: 13 Type = 0A 2004-08-12 14:13:34 // release date * Len: 1E Type = 0F FA5I_C_FME2_XX_XXX_XXX.tmp * Len: 0F Type = 1D Stefan Mossberg //programmed by name? * Len: 0C Type = 10 EOLStation2 //programmed by device * */ switch (type) { case 0x10: m_programmerDevice = data; break; case 0x1D: m_programmerName = data; break; case 0x0A: m_releaseDate = data; break; case 0x08: m_SoftwareVersion = data; break; case 0xC1: m_PartNumber = data; break; case 0x92: m_hardwareID = data; break; case 0x97: m_deviceType = data; break; } } while (i < piarea.Length - 1); //TODO: decode vin parts etc DecodeExtraInfo(filename); }