Create own language packs for MK5 IPC

IPC - Instrument cluster panels (like Convers+)
leader
Active member
Posts: 50
Joined: 24 Jun 2019, 10:35
Contact:

Create own language packs for MK5 IPC

Post by leader »

It's not everything only about hex editing.

Some Ford IPC-s has lookup table with offset addresses to every menu element. In this case you can use the hexeditor easly.

But many other IPC isn't containing these index table and the language area also has many control caracters wich refers to different control characters, symbols or some gui elements. So hexediting these area is not so trivial and safe. I think is better the understand the control characters and create an unpacker/packer for the elements. The structure of one element is the following:

Code: Select all

<1BYTE CTRLCHAR><BYTES>
In most of time the control character is smallerr then 0x1F, this means that the element is a normal ascii text and the control character is the lengt of the text. For example:
mk5_lang.JPG
Where:
<b>0B </b>: length of the text
<b>Text</b>: Driver Door

The control character 0x1F is followed only be 2 bytes, and I think is means some symbol or gui element.
0xCX means russion code page, where X means the length of the text. (0 means 16 chars)

I already indetified some control characters but there are many other unknows.

Here is a small GO code how to parse the language area (not all control characters are handled or proper handled):

Code: Select all

  n:=0x195304 //offset of language area
  for i:=0; i<20000; i++ {
    x := int(data[n]) & 0xff
    n++
    if (x & 0xf0) == 0xE0 {
      n += (x & 0x0f)
      continue
    }
    if (x & 0xf0) == 0x40 { //switch code page
      n += (x & 0x0f)
      continue
    }

    if (x & 0xf0) == 0x50 { //swich code page
      if (x & 0x0f) == 0 {
        n += 16
      } else {
        n += (x & 0x0f)
      }
      continue
    }

    if (x & 0xf0) == 0x60 { //
      n += (x & 0x0f)
      continue
    }

    if (x & 0xf0) == 0xA0 { //
      n += (x & 0x0f)
      continue
    }

    if (x & 0xf0) == 0xC0 { //Russian code page, 04XX
      n += (x & 0x0f)
      continue
    }

    if (x & 0xf0) == 0x20 {
      n += (x & 0x0f)
      continue
    }

    if x == 0x1F { //always followed by 2 bytes
      n += 2
      continue
    }

    if x == 0x3F { //always followed by 2 bytes
      n += 3
      continue
    }

    if x>0x80 { //Ascii text followed by code page switch (?)
      x &= 0x0f
    }
    s := string(data[n:n+x])
    fmt.Printf("%08X (%02X): %s\n", n, x, s)
    n += x
  }
Any future information is welcommed in this topic :)
You do not have the required permissions to view the files attached to this post.
Go4IT
Pro
Posts: 967
Joined: 08 Feb 2019, 12:25

Re: Create own language packs

Post by Go4IT »

I totally agree with you, understanding the structures is better than poking around.
Well, i guess good reverse engineering needs to think like a programmer and a compiler. This will explain why some data is found in the middle of the code and others comes ins chunks at the end.
So, another way to interpret the data could also be to find the code accessing it.
leader
Active member
Posts: 50
Joined: 24 Jun 2019, 10:35
Contact:

Re: Create own language packs

Post by leader »

Go4IT wrote: 22 Feb 2020, 20:04 Oh, BTW, if we talking about some firmware it would be helpfull to always note the firmware-number. Right now, i don't find the text you are quoted above ("Driver Door") in any Convers+ firmware i have at hand (vFL and FL).
Thats right, because it is from Mondeo MK5 IPC. I just unpacked the ifs2 filesystem from the firmware and decompiled the HMI (main application) wich contains the menu texts also. Many other Ford IPCs (like Kuga Mk1/MK2) has the similar structure....
leader
Active member
Posts: 50
Joined: 24 Jun 2019, 10:35
Contact:

Re: Create own language packs

Post by leader »

Now It seems that I found the functions the process language area:
langparse.JPG
langparse2.JPG
So I start to analyse them. If somebody else is interested than I can send the unpacked HMI file from lastest firmware...
You do not have the required permissions to view the files attached to this post.
Artist
Active member
Posts: 83
Joined: 21 Sep 2019, 08:49

Re: Create own language packs

Post by Artist »

You probably missed it, there are many reports of open doors from all sides ... They're only in Main.
And some search engines in hex editors only work if you type the right case at the beginning of the sentence ...

By the way, from reality I assume that this road is not necessary. Unless there is a person who directly created and participated in the development of conver+, you will not find a way to easily translate into your local language ...
Your guess somewhere in the forum is completely nonsense.
I did it and it's not even a few days ... Good luck in translation. And there are things that don't belong officially as additional functions. No official logical sequence will help you. There the author allowed it. And it certainly has nothing to do with the original ...
When translating into Slavic speeches, diacritic is necessary. Surely no one dares to upload the entire character set here ...
This isn't interesting for your region, so don't worry about convers+ adjustments.
And I don't believe you have to understand it and learn more speech ...
That is reality ...
You do not have the required permissions to view the files attached to this post.
Artist
Active member
Posts: 83
Joined: 21 Sep 2019, 08:49

Re: Create own language packs

Post by Artist »

To: leader
How do you want to translate words in additional features?
leader
Active member
Posts: 50
Joined: 24 Jun 2019, 10:35
Contact:

Re: Create own language packs

Post by leader »

You right in many cases. There are limitations in language translatons. for example the available code pages.....
If I remember well than russian charset was not supported by the C+, but some russian guy (I'm not sure if it was m0tral or somebody else) implemented the cyrillic charset and made the translation....

I also made the translation for my country some years ago (fortunately my code page was supported) with Hexeditor but I made some tools to help my work:
convers_lang.JPG
I found some patterns to identify many the language areas, than dumped and modified these areas and finaly packed it back in any custom firmwares.
(this way I inserted into many of m0rtal's firmwares my translaton)
The paterns to identify different languages was: 0x0A, 0x00, 0xA7, 0x00, 0x02, 0x04, 0x49, 0x0C, 0x02, 0x00, 0x00, 0x4A, 0x00, 0xA9
You do not have the required permissions to view the files attached to this post.
leader
Active member
Posts: 50
Joined: 24 Jun 2019, 10:35
Contact:

Re: Create own language packs

Post by leader »

Artist wrote: 22 Feb 2020, 20:37 To: leader
How do you want to translate words in additional features?
What do you mean on additional features?
The code above is for Mondeo MK5 IPC, not for Convers+ (Mondeo MK4).
Artist
Active member
Posts: 83
Joined: 21 Sep 2019, 08:49

Re: Create own language packs

Post by Artist »

It's better if it is on another topic. because one cannot perceive different things in one topic. Then there can be only one topic for everything ... If the same ipc MK4 and MK5 then continue ...
leader
Active member
Posts: 50
Joined: 24 Jun 2019, 10:35
Contact:

Re: Create own language packs

Post by leader »

Than is better to put prefix in the topic title next time to limit the conversation on exact model.
Maybe it would be better to create subforums based on models. (Mondeo MK4, Mondeo MK5, Kuga MK2, Ranger MK2 and so on...)
Post Reply