Xiaomi Mi Band 2 - Firmware | Fitness bracelet



Rep: (1201)
Fitness braceletXiaomi Mi Band 2 - Firmware
PictureXiaomi Mi Band 2
Discussion пїЅ | Purchase пїЅ | Firmware пїЅ | Accessories пїЅ | Marriage пїЅ | Android app пїЅ | IOS application пїЅ | Xiaomi club пїЅ | Sleep Watch Club пїЅ | Wearable Electronics Club пїЅ | Our achievements in Mi Fit пїЅ | Club owners Xiaomi Mi Band 2

Attached Image


FAQ
Q - Question
O - Answer


AT: Is it possible to return the original firmware?
ABOUT: Yes , can. For this there is several ways .

AT: What is the name of the firmware file and fonts?
ABOUT:
  • Mili_pro .fw - firmware
  • Mili_pro.ft - fonts

AT: How to see the version of the bracelet to understand which firmware is suitable?
ABOUT: One way is with the Gadgetbridge app. We read here .

AT: What should be the minimum charge level of the bracelet before installing the firmware?
ABOUT: When charging below 10%, the bracelet itself will not allow to flash.
It is recommended to flash at a rate not lower than 15%.

AT: The bracelet has permanent breaks and the inability to connect it after reflashing.
ABOUT: We read here .

AT: Caller name display on Android 9.0 does not work. How to fix?
ABOUT: No !
Properly make out the post
  • Device manufacturer, model
  • Firmware version
  • Official or custom firmware
  • What software do you use to sync your device
  • Your problem (the more you specify the information, the better)

Modified firmware design template
For different versions of bracelets do a separate post!
In the spoiler "Download"it is necessary to enter which version number of the firmware will be as a result (preferably with an explanation).
This was done specifically to prevent flashing the original from the application itself!


Picture

It should look like this:


Title: ...
Based on firmware: ...
For bracelets version HW: ...
What is done
Here is a description of what has been done.

A photo
Here is a photo.

Download
Here is the firmware and description (archive or rename), in .rar not desirable.

Image archive
Here is the archive itself with pictures.


Picture

In the code:

[B] Name: [/ B] ...
[B] Based on firmware: [/ B] ...
[SPOILER = [B] For bracelets version HW: [/ B] ...]
[SPOILER = [B] [SIZE = 1] What has been done [/ SIZE] [/ B]] Here is a description of what has been done. [/ SPOILER]
[SPOILER = [B] [SIZE = 1] Photo [/ SIZE] [/ B]] Here is the photo. [/ SPOILER]
[SPOILER = [B] [SIZE = 1] Download [/ SIZE] [/ B]] here is the firmware. [/ SPOILER]
[SPOILER = [B] [SIZE = 1] Archive of pictures [/ SIZE] [/ B]] Here is the archive itself with pictures. [/ SPOILER]
[/ SPOILER]
Firmware and fonts
Original firmware
For all revisions

For HW: v.0.1.3.2 (3)

For HW: v0.16.2.2 (3)

Custom firmware(dials, dates, fonts, icons)
How to flash
For smartphones with MIUI, it is recommended to disable the Mi Band smart unlock before starting the firmware!

Before starting to read firmwarerecommendation !

For bracelets HW: v.0.1.3.2(3)(4)

For bracelets HW: v.0.9.3.3(4)

For bracelets HW: v.0.16.2.2(3)

Fonts

Instructions
Instruments
Polls archive
Poll 30.03.2018
Attached Image
Poll 04/28/2018
Attached Image


Post has been editedAndyER03 - 05.08.19, 23:16
Reason for editing: Install NodeJS and launch Mi Band 2 Date Editor



Rep: (32)
* SPRITE_ASUS ,
SPRITE_ASUS @ 09/19/17, 19:42 *
The point looks like a separator of the day of the week and the month, and so you can leave.
It’s better to even put two points, and make the day of the week two-letter. Then the separator will be clearer and the day of the week will be more generally accepted.



Rep: (227)
* SPRITE_ASUS , ...
It’s better to even put two points, and make the day of the week two-letter. Then the separator will be clearer and the day of the week will be more generally accepted.

I immediately wrote about two-letter how Santax laid out the firmware, but so far no one has done it.



Rep: (227)
* SPRITE_ASUS, three letters in the original and three letters are replaced, if it were so simple, santax would do right away. If possible, it will take time to redistribute.

Clear. But can the third letter be replaced with any character?



Rep: (227)
* SPRITE_ASUS, well, it always seems easy from the outside, and when you get in: blink: that’s why I don’t climb, because I don’t even realize what santax has already done, and this is aaagromnoe work, I don’t have any strength or desire after myth. And any slip - a dead bracelet that cannot be restored!

Nobody talked about easily, I somehow did a little editing and translation of the application for the Iwownfit bracelet, then there was still entertainment.



Rep: (918)
As mentioned earlier, it was not possible to bypass the 9 character limit. Most likely somewhere in the firmware lies.
But the proposedidea Xtracer allowed to remove the indent between letters.
If you wish, you can try and use.

1. Flash the Mili_pro.ft.ru file through the Notify & Fitness utility
2a (for Mifit). Make a change to a.smali file (smali_classes2 \ com \ xiaomi \ hm \ health \ receiver \) - add a code block (example in the attachment, between "### santax"):
const-string v2, "\ u0401"
const-string v3, "\ u00BC"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0410"
const-string v3, "\ u00BD"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0411"
const-string v3, "\ u00BE"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0412"
const-string v3, "\ u00BF"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0413"
const-string v3, "\ u00C0"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0414"
const-string v3, "\ u00C1"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0415"
const-string v3, "\ u00C2"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0416"
const-string v3, "\ u00C3"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0417"
const-string v3, "\ u00C4"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0418"
const-string v3, "\ u00C5"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0419"
const-string v3, "\ u00C6"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u041A"
const-string v3, "\ u00C7"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u041B"
const-string v3, "\ u00C8"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u041C"
const-string v3, "\ u00C9"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u041D"
const-string v3, "\ u00CA"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u041E"
const-string v3, "\ u00CB"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u041F"
const-string v3, "\ u00CC"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0420"
const-string v3, "\ u00CD"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0421"
const-string v3, "\ u00CE"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0422"
const-string v3, "\ u00CF"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0423"
const-string v3, "\ u00D0"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0424"
const-string v3, "\ u00D1"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0425"
const-string v3, "\ u00D2"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0426"
const-string v3, "\ u00D3"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0427"
const-string v3, "\ u00D4"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0428"
const-string v3, "\ u00D5"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0429"
const-string v3, "\ u00D6"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u042A"
const-string v3, "\ u00D8"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u042B"
const-string v3, "\ u00D9"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u042C"
const-string v3, "\ u00DA"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u042D"
const-string v3, "\ u00DB"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u042E"
const-string v3, "\ u00DC"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u042F"
const-string v3, "\ u00DD"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0430"
const-string v3, "\ u00DE"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0431"
const-string v3, "\ u00DF"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0432"
const-string v3, "\ u00E0"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0433"
const-string v3, "\ u00E1"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0434"
const-string v3, "\ u00E2"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0435"
const-string v3, "\ u00E3"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0436"
const-string v3, "\ u00E4"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0437"
const-string v3, "\ u00E5"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0438"
const-string v3, "\ u00E6"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0439"
const-string v3, "\ u00E7"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u043A"
const-string v3, "\ u00E8"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u043B"
const-string v3, "\ u00E9"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u043C"
const-string v3, "\ u00EA"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u043D"
const-string v3, "\ u00EB"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u043E"
const-string v3, "\ u00EC"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u043F"
const-string v3, "\ u00ED"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0440"
const-string v3, "\ u00EE"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0441"
const-string v3, "\ u00EF"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0442"
const-string v3, "\ u00F0"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0443"
const-string v3, "\ u00F1"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0444"
const-string v3, "\ u00F2"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0445"
const-string v3, "\ u00F3"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0446"
const-string v3, "\ u00F4"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0447"
const-string v3, "\ u00F5"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0448"
const-string v3, "\ u00F6"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0449"
const-string v3, "\ u00F7"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u044A"
const-string v3, "\ u00F8"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u044B"
const-string v3, "\ u00F9"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u044C"
const-string v3, "\ u00FA"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u044D"
const-string v3, "\ u00FB"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u044E"
const-string v3, "\ u00FC"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u044F"
const-string v3, "\ u00FD"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0


const-string v2, "\ u0451"
const-string v3, "\ u00FE"
invoke-virtual {v0, v2, v3}, Ljava / lang / String; ->replaceAll (Ljava / lang / String; Ljava / lang / String;) Ljava / lang / String;
move-result-object v0

2b (For third-party programs): After receiving the line with the name of the contact, change the letters in it by analogy with the code above. v2 - before; v3 - after.

Attached files

Attached file11.rar(4.1 KB)


Post has been editedsantax - 19.09.17, 21:35



Rep: (422)
Lolex @ 09/20/2017, 03:29*
the numbers went down, and the point can still be the same or so leave
And I thought it was a separator, not a period. I’ll omit it. And yet - is it worth it to pull the numbers up and do more?



Rep: (422)
But the proposed idea XTracer allowed to remove the indentation between the letters.

Great idea. I thought here that in fact we do not need to display the rest of the languages ​​in Unicode. So you can gash MiFit in the manner suggested above with the ability to change fonts.
u ** 06 - one
u ** 07 - second
....
There are a lot of Chinese characters. It may be enough for several options. Just to make their choice in myth and change the second byte when transmitting data.



Rep: (918)
* SirStefan, you can create your own file with fonts - the format is very simple. The main thing now is to get around the 9-character limit, and then you can think of different fonts.



Rep: (422)
Firmware from SirStefan
Redrawn icons without frames. Some are replaced by their options.
Date in Russian.
The space between Russian letters is removed only in SS.2.53 v.02.alpha3
The firmware is not renamed to zip, these are archives. Unpack them and then reflash them.
Attached Image

If you put+ and not difficult - indicate the option that you liked. It’s more clear to me which options to develop and which ones to scrap.
SS.56 v.05.alpha2 based 1.0.1.53
Standard font
Attached fileMili_pro_SS_3.fw.zip (124.72 KB)
Font Electronika

SS.56 v.06.alpha2 with Ukrainian date based 1.0.1.54 (03.10.2017)
With my icons and font of numbers Electronika. Day of the week large, month with a capital letter. Option with Ukrainian days and months.
Attached fileMili_pro_SS_54_Electronika_2_Ukr.fw.zip(124.95 KB)


SS.56 v.06.alpha3 based 1.0.1.54 (15.10.2017)
With my icons and font of numbers Electronika. Day of the week large, month with a capital letter.
Graphics Replacement:savagemessiahzine.comhung two balloons with eyes on the icon. Medical cross left in the explosion. Basket moved instead of the wing. on brow character with key picture credit card. on hieroglyph ALIPAY credit card picture. the exclamation point transferred to the character QIANNIU. So it seems better to comply with the standard links in myth.
Font Electronika

FontNadejdaPe.


SS.56 v.07.alpha3 based 1.0.1.54 (15.10.2017)
Slightly replaced the icons, at the clock I redrawed the unit and put it in the center. Slightly shifted the date. Corrected small letters on days of the week.
Fri27 Oct: Font Electronika (bold date)
Fri 27 Oct: Font Electronika
Fri 27 Oct: FontNadejdaPe.
27 Oct Fri: Font Electronika

PT27 OCT: Font Electronika (bold date). Replaced the balloon icon with a heart. to the sign V. Replaced the alarm icon



SS.2.53 v.02.alpha3 based 1.0.1.53 (06.11.2017)
PT27 OCT: Font Electronika (bold date). Replaced the alarm icon. Enlarged some icons. Russian characters without spaces in any program from kirill1999. (upd.23.01.2018)

PT27 OCT: Font NadejdaPe. (bold date). Replaced the alarm icon. Russian characters without spaces in any program from kirill1999.

Option fromsantax : Font Electronika



SMALL FONT my option: (works with any firmware and bracelet option)
English and Russian letters, punctuation marks, some characters are redrawn.
(Now we read the text, S is not glued, the brackets look harmonious, the colon is visible)
Attached fileMili_pro_ss_5.ft.zip(135.67 KB)
Install using Notify & Fitness or GadgetBridge by analogy with firmware.
Please indicate the authorship of the original for modifications.


Different firmware (Date in Chinese format, runic font)
Firmware archive
.56 v.01
He pulled out a little date digits. It has become more readable. I didn’t touch the point in the date - as a separator, it looks better in my opinion.
I removed the frames from almost all the icons (I wanted to do this from the moment of buying the bracelet) and replaced one incomprehensible character with "!".
Version put .56
Attached fileMili_pro_santax_ss_2.fw.zip(124.62 KB)


.56 v.05.alpha
I finalized the machine icon, adjusted the bracelet icon, returned a thin date font.
Basic: this is my version of the mod, not based on firmware fromsantax . He redrawn the fonts of the days of the week. Strongly did not check, flooded, wound up and good. There is no time to take a photo. But "PN" seems to be writing.
Attached fileMili_pro_SS.fw.zip(124.71 KB)


Sew it at your own peril and risk. No responsibility for the bracelets :)
Information on firmware for those who want to make their own hands
Lolex MiFit mod - best complement custom firmware

Acknowledgments (Say thanks through "+". It’s not difficult for you;
DupleXSPb for the development of the project, assistance in design, ideas, testing
santax for great firmware options, ideas, tips
loginymjok for help in testing and design
kirill1999 per patch without spaces for any firmware.
Picture


Post has been editedSirStefan - 29.01.18, 13:00
Reason for editing: New firmware version SS.2.53 v.02.alpha3



Rep: (5056)
* santax, and the internal name of the font is the same as it is written Mili_pro.ft.ru or?
* SirStefan, it’s good that the numbers and icons (all Chinese ones need to be replaced for sure, but there are so many applications in general so that it doesn’t work for everyone), but with a dot and two letters in koumiss, I have already been tanned, and then a new myth comes in 308.

Post has been editedlolex - 20.09.17, 08:56



Rep: (422)
* lolex Is there a new firmware in it or not?



Rep: (5056)
* SirStefan, 53: P



Rep: (422)
but with a dot and with two letters in koumiss, I have already been scaled

It is to* santax . I didn’t really understand the code. Yes, and this is its development :)

By the way* santax There is a proposal to redo the date.
Instead of "Wed. Sen20" make "Wed 09/20". Those. there is still a table of month names. Replace names with numbers. This is of course a little by American standard, but IMHO readable than "Sen".

Post has been editedSirStefan - 20.09.17, 09:05



Rep: (918)
* lolex for mifit it’s better to rename it to .en or make a change to it to support the .ru file. .ru is a .en file supplemented with Russian 66th letters.

Request to all: to detect how many seconds the display is on when a notification is received from SMS (maybe 5-6s), a call (maybe about a minute), an alert (maybe 1-2s). And write here. Thank.



Rep: (5056)
* santax, Yes, I already do this and that, I don’t understand that it doesn’t flash me from myth, so I asked. In the evening I’ll see what else is necessary for him, but first to cut 308

Post has been editedlolex - 20.09.17, 09:04



Rep: (918)
* lolex I therefore downloaded it through N&F

* SirStefan, honestly not really like it. Although you can do of course, but then, not now.

Posted on 09/20/2017, 09:14:

* Stas_kuk then I kiss the branch - reverse bracelet firmware. I studied the firmware of other bracelets. They are similar since the SDKs use one.



Rep: (422)
* elektrik_66, Rectangular numbers there are larger. Need to redraw. Draw the numbers from 0 to 9 as needed, I will fill in and make a firmware option



Rep: (227)
SirStefan @ 09/20/2017, 12:42*
* elektrik_66, Rectangular numbers there are larger. Need to redraw. Draw the numbers from 0 to 9 as needed, I will fill in and make a firmware option

Can you write a replacement instruction in a nutshell?
What to edit and at what address?

Post has been editedSPRITE_ASUS - 20.09.17, 14:16



Rep: (422)
* SPRITE_ASUS, in a nutshell:
Firmware info
General information for understanding
Unlike fonts, pictures in the firmware are a little non-standard. Each byte of the picture is a column of dots with a width of 1 and a height of 8. The first bit is on top.
Specifically, the numbers of the clock (which are with the date) are starting from 288E4. Each digit is 36 bytes: 3 blocks of 12.
This is how the clock numbers lie
Attached Image

Pictures are scattered on the firmware, for example, here is 26B30. Each is 5 blocks of 36, i.e. 36 * 40.
Attached Image

The biggest picture that I came across is 72 pixels wide.
This 66
Attached Image

Edit with any hex editor. Or write your own tool.
Language file descriptions - Mili_pro.ft
Description of the language module format
1. TITLE - fixed width in 0x10
48 4D 5A 4B 01 FF FF FF FF FF FF FF FF FF 74 38
The first 4 heading is “HMZK”. Then 2 lower bytes of the firmware version, in this case 01 FF (.1.255), then 8 bytes of incomprehensible need. And the last 2 of 16 is the size of the table of contents block: "74 38", i.e. 0x3874.

2. CONTENT
Since we have Unicode, 2 bytes are allocated to each character. 0x3874 / 2 bytes per character = 0x1C3A in decimal 7226. I.e. 7226 characters of various languages ​​are described in this language file (the lion's share is Chinese characters).
After 16 bytes of the header are 14452 (0x3874) bytes unicode characters: "20 00 21 00 22 00 23 00 24 00 ......". For example, the first 2 bytes of 20 00 describe a space ... The Russian alphabet goes to "** 04".

3. DESCRIPTION OF IMAGES
Here the characters themselves go exactly in the same order as in the table of contents. Each is described by 32 bytes. 2 bytes each line of the picture is 16 * 16. Unlike firmware images, bits are laid out in a line.

Something like this (Letter A):
00 00 00000000 00000000
00 00 00000000 00000000
00 00 00000000 00000000
00 00 00000000 00000000
00 00 00000000 00000000
08 00 00001000 00000000
08 00 00001000 00000000
14 00 00010100 00000000
14 00 00010100 00000000
22 00 00100010 00000000
22 00 00100010 00000000
7F 00 01111111 00000000
41 00 01000001 00000000
41 00 01000001 00000000
80 80 10000000 10000000
80 80 10000000 10000000


Unicode Character Search
General formula: The position of the letter in the table of contents from the beginning of the table of contents * 0x10 = The position of the description of the picture of the letter from the beginning of the description table.
For example, we need the Russian letter A (unicode 10 04)
We are looking for bytes "10 04" (so that there were ** 04 around too, do not be mistaken)
In our file they are at offset 0x140
subtract the size of the header 0x140-0x10 = 0x130 - the position of the letter from the beginning of the table of contents
multiply by 0x10 0x130 * 0x10 = 0x1300 - the position of the picture of the letter from the beginning of the description table
add the title and description table and get the picture position of the letter from the beginning of the file
0x1300 + 0x10 + 0x3874 = 0x4B84 - address of the first byte of the description of the picture of the Russian letter A.

Images 54 firmware
Keep in mind that these are addresses on .54, not .53 (on which all mods are now made) Since I want to roll all the mods on .54 soon, I did its analysis. The width goes in points. Height in bytes. Those. 12x3 is a picture of 12x24 pixels.

Icons
26CC0 36x5: Icon: MiBand framed bracelet
26D74 36x5: Icon: Hieroglyph in the frame
26E28 36x5: Icon: Wing in a frame
26EDC 36x5: Icon: Twitter framed
26F90 36x5: Icon: WhatsApp in frame
27044 36x5: Icon: LINE balloon in a frame
270F8 36x5: The app icon in the frame
271AC 36x5: Icon: Two hieroglyphs in a frame
27260 36x5: Icon: Calendar in frame
27314 36x5: Icon: Penguin in a frame
273C8 36x5: Icon: VKontakte framed
27689 36x5: Icon: Cow in a frame
2773D 36x5: Icon: Mi-chat in the frame
277F1 36x5: Icon: Framed Phone Call
278A5 36x5: Icon: Envelope with RMB
27959 36x5: Icon: Ghost in the frame
27A0D 36x5: Icon: Facebook framed
27BD4 36x5: Icon: JD.COM Hieroglyphs in the frame
27CA8 36x5: Icon: Mi in a frame
27DCE 36x5: Icon: Ninja head in a frame
27E82 36x5: Icon: Hieroglyph in the frame
27F36 36x5: Icon: Pokemon Go in a frame
2800C 36x5: Icon: Telegram framed
280C0 36x5: Icon: Eye in the frame
28174 36x5: Icon: Hieroglyph (man and key) in a frame
28228 36x5: Icon: Chat with lightning in a frame
282DC 36x5: Icon: Explosion framed
28408 36x5: Icon: Skype in frame
284F8 36x5: Icon: Instagramm in a frame
285AC 36x5: Icon: Envelope in a frame
28660 40x5: Icon: two balloons with eyes
28728 36x5: Icon: TALK in frame
287DC 36x5: Icon: "framed balloon
28890 36x5: Icon: Z in the star in the frame
Watch numbers
28AC0 12x3: Time: Number 0
28AE4 12x3: Time: Number 1
28B08 12x3: Time: Number 2
28B2C 12x3: Time: Number 3
28B50 12x3: Time: Number 4
28B74 12x3: Time: Number 5
28B98 12x3: Time: Number 6
28BBC 12x3: Time: Number 7
28BE0 12x3: Time: Number 8
28C04 12x3: Time: Number 9
28C28 12x3: Time: Digit:
2A308 12x5: Time without date: Number 0
2A344 12x5: Time without date: Digit 1
2A380 12x5: Time without date: Number 2
2A3BC 12x5: Time without date: Number 3
2A3F8 12x5: Time without date: Digit 4
2A434 12x5: Time without date: Digit 5
2A470 12x5: Time without date: Number 6
2A4AC 12x5: Time without date: Digit 7
2A4E8 12x5: Time without date: Number 8
2A524 12x5: Time without date: Number 9
2A560 12x5: Time without date: Digit:
2A59C 12x5: Time without date: Digit -
Date digits
28D88 5x2: Date: Number 0
Thick numbers are used in the Chinese version of the date to be displayed as 09/29
28D92 5x2: Date: Number 1
28D9C 5x2: Date: Number 2
28DA6 5x2: Date: Number 3
28DB0 5x2: Date: Number 4
28DBA 5x2: Date: Number 5
28DC4 5x2: Date: Number 6
28DCE 5x2: Date: Number 7
28DD8 5x2: Date: Number 8
28DE2 5x2: Date: Number 9
28F6C 6x2: Date: Thick digit 0
28F78 6x2: Date: Thick 1
28F84 6x2: Date: Thick 2
28F90 6x2: Date: Thick 3
28F9C 6x2: Date: Thick 4
28FA8 6x2: Date: Thick 5
28FB4 6x2: Date: Thick 6
28FC0 6x2: Date: Thick 7
28FCC 6x2: Date: Thick 8
28FD8 6x2: Date: Thick 9
28FE4 6x2: Date: Thick Digit /
Date letters
28AAC 1x2: Font: Letter i
28AAE 5x2: Font: Letter a
28AB8 4x2: Font: Letter t
28C4C 5x2: Font: Letter J
28C56 4x2: Font: Letter r
28C5E 1x2: Font: Letter l
28C60 5x2: Font: Letter v
28C6A 4x2: Font: Letter P
28C87 5x2: Font: Letter d
28C91 4x2: Font: Letter b
28C99 5x2: Font: Letter T
28CA3 6x2: Font: Letter N
28DEC 5x2: Font: Letter F
28DF6 4x2: Font: Letter n
28DFE 4x2: Font: Letter h
28E06 6x2: Font: Letter D
28E36 5x2: Font: Letter O
28E40 1x2: Font: Letter,
28E42 5x2: Font: Letter u
28E4C 4x2: Font: Letter o
28E54 4x2: Font: Letter Y
28E5C 4x2: Font: Letter e
28E64 4x2: Font: Letter g
28F32 4x2: Font: Letter c
28F3A 7x2: Font: Letter W
28F48 6x2: Font: Letter A
28F54 5x2: Font: Letter S
28F5E 7x2: Font: Letter m
Other images
249EA 46x5: Coin and credit card
24AD0 32x4: Clock alarm
24B70 54x5: Syringe
24C7E 31x5: Parent with child
24D19 33x5: Stethoscope (medicine)
24DBE 37x5: Coffee Mug
24E77 28x5: Wedding ring
24F03 49x5: Coin and car
24FF8 35x5: Clapperboard (holiday)
250A7 30x5: Gift (box)
2513D 49x5: Dumbbell
25232 36x5: Roll (achievement 100)
252E6 28x5: Tablet for notes
254B4 52x5: Car
255B8 38x5: Man got out of bed
25676 45x5: Coin and house
25757 51x5: Teacher at the blackboard with a schedule
25856 20x5: Walking man
258BA 62x5: Three playing cards
25A05 34x5: tablet
25AAF 50x5: House with a clock (station?)
25BA9 42x5: Tennis racket and ball
25C7B 45x5: Man on a bicycle
25D5C 33x5: Mug with liquid
25E01 32x5: Man throws up a child
25EA1 52x5: Blackboard
25FA5 49x5: Steam locomotive
2609A 35x5: Basket (shopping cart)
26149 43x5: fork plate knife
26220 38x5: Man in lotus position
262DE 43x5: Dog on a leash
263B5 39x5: An open book
26478 26x5: Man running
264FA 39x5: TV
265BD 44x5: Airplane
26699 38x5: Cake with a candle
26757 36x5: Phone: Outgoing call
2680B 35x5: Two friends
268BA 40x5: Man sleeping
26982 47x5: The letter flies away
26A6D 35x5: Umbrella
26C25 31x5: Phone: Handset (curve)
2747C 36x5: Message: Icon to the right
27530 33x5: Message: Icon in the center
275D5 36x5: Message: Icon to the left
27D5C 19x3: Mi miniature bracelet with 4 points in the corners
27D95 19x3: Handset mini
28390 24x5: Reminder (bell in smartphone)
284BC 20x3: Message: Another icon in the center
28944 34x5: Teleon: Tube
289EE 38x5: Phone: Handset from a different angle
28E6C 11x2: Character: Day of the week 1
28E82 11x2: Character: Day of the Week 2
28E98 11x2: Hieroglyph: Day of the Week 3
28EAE 11x2: Hieroglyph: Day of the Week 4
28EC4 11x2: Character: Day of the week 5
28EDA 11x2: Hieroglyph: Day of the Week 6
28EF0 11x2: Character: Day of the week 7
28EF0 11x2: Hieroglyph: Day of the week Week 1
28F06 11x2: Hieroglyph: Day of the week Week 2
28F1C 11x2: Hieroglyph: Day of the Week Week 3
29024 47x5: The little man passed 1
2910F 27x5: Candle Flame
29196 51x5: Finger presses button 1
29295 52x5: Finger presses button 2
29399 52x5: Finger presses button 3
2949D 29x3: Flash 1
294F4 72x5: Flash 2
2965C 55x3: Flash 3
29701 35x2: Flash 4
29743 17x1: Flash 5
29754 17x2: The inscription "km"
29776 36x5: Firmware: Update
2982A 14x2: The inscription "mi" (miles)
29846 14x3: Medium heart
29870 14x3: Small heart
2989A 12x5: A man gets up from a chair
298D6 32x5: "i" in a circle
29976 22x5: A man got up from a chair and went
299E4 32x5: A man walks from chair 2
29A84 32x5: A man walks from chair 3
29B24 34x5: A man walks from chair 4
29BCE 4x2: Symbol: Apostrophe
29BD6 36x5: Message 2: Icon to the right
29C8A 33x5: Message 2: Icon in the center
29D2F 36x5: Message 2: Icon to the left
29DE3 49x5: The little man in the ball (prize)
29ED8 14x5: Walking Man
29F1E 22x5: Walking Man 2
29F8C 9x5: Walking Man 3
29FB9 51x5: Pennant: Star
2A0B8 40x5: Pennant: Star 2
2A180 72x5: Battery: Empty
2A6B8 5x2: Point
2A6D4 56x5: Pennant: Star 3 with stars
2A7EC 56x5: Pennant: Star 4 with stars
2A924 14x5: Walking Man 4
2A96A 41x5: A walking man
2AA37 19x3: Mi miniature bracelet with 4 points in corners 2
2AA70 12x5: Walking Man
2AAAC 40x5: Pennant: Collapsed
2AB74 40x5: Pennant: Half-expanded
2AC3C 15x3: Cross
2AC69 14x5: Walking Man
2ACAF 51x5: Pennant: Small Star
2ADD0 8x5: Coin with the little man: Rotation 1
2ADF8 32x5: Coin with Man: Rotation 2
2AE98 49x5: Coin with Man: Rotation 3
2AF8D 46x5: Coin with Man: Rotation 4
2B073 44x5: Coin with the little man: Rotation 5
2B14F 22x5: A walking man
2B1BD 33x5: Picture: Month
2B262 13x5: Walking man
2B2A3 9x5: Walking Man 2
2B2D0 54x5: The finger presses the button
2B3DE 44x5: Footprints
2B4BA 36x5: Firmware: Successfully
2B56E 36x5: Heart
2B622 60x5: The finger presses the button in the rim
2B74E 12x5: Walking Man
2B78A 9x5: Walking Man 2
2B7B7 33x5: Location: Location
2B85C 22x5: Man running
2B8CA 36x5: Firmware: Unsuccessful
2B97E 36x5: Alarm 1 line
2BA32 36x5: Alarm clock 2 features
2BAE6 40x5: Alarm 3 features
2BBAE 32x5: Alarm off
2BC4E 44x5: Speedometer: Right arrow
2BD2A 12x3: Font%
2BDB8 66x5: No connection to the phone
2BF02 72x5: Finger presses a button with a frame
2C06A 72x5: Character huami.com
2C1D2 32x5: Alarm Clock
2C272 67x5: Finger presses a button with a frame
2C3C1 12x5: A little man sits on a chair
2C420 18x5: Man got up from his chair
2C47A 9x2: Letter M
2C48C 34x5: Tube
2C536 38x5: Tube at a different angle
2C5F4 35x5: Baloon with a heart
2C6A3 31x5: Tube at a different angle


Replacing the names of the days of the week on the example of 54 firmware
Principle: pictures of letters n * 2 bytes are scattered throughout the firmware. The table refers to them, 8 * M (number of letters) bytes in the format of 4 bytes, the address of the letter, 1 byte is its width, 3 bytes are zeros. Located at (for original .54) 28CB0. Starting with the first letter, a hexadecimal number is assigned to each. a-0, b-1, c-2, ... (note, the table does not have all the letters of the alphabet, but there is a dot) These numbers encode days of the week and months. The table of the days of the week is at 28C72. It has 21 bytes, 3 for every day. 15 0A 09 corresponds to the letters "Mon" - Monday, etc. The table of months is at 28E12. It has 36 bytes, 3 for each month. 14 00 09 - "Jan"
Attached Image
Attached Image

Addresses from the program are converted to an offset from the beginning of the file according to the following scheme: here we have a link to the first letter AE CA 02 08, arrange the bytes in the reverse order - 0802CAAE, subtract the offset 8004000. We get 28AAE - this is the address of the first letter from the beginning of the file.
Thus, to fix the days, we first redraw the pictures of the letters. Then we fill in the symbol table with new links and new letter sizes. We compose our substitution table
0-A
1-B
2-B
3G
...
and refill the table of the names of the months and days of the week. Save
For advanced
In my firmware, I redrawed the days of the week with a capital letter
Mon Tue Wed Thu Fri Sat Sun Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
Total
ABC
He arranged the letters at offset 28E36, since there are a lot of English letters, then 10 hieroglyphs 11 wide, then again letters and no code. Therefore, I will not spoil the firmware. Sorted by width for ease of editing.
--- Width 2
SPACE 28F64 0
--Width 5
A 28E36 1
B 28E40 2
In 28E4A 3
D 28E54 4
And 28E5E 5
H 28E68 6
About 28E72 7
P 28E7C 8
P 28E86 9
C 28E90 a
T 28E9A b
H 28EA4 s
I'm 28EAE d

a 28EB8 e
at 28EC2 f
g 28ECC 10
e 28ED6 11
th 28EE0 12
to 28EEA 13
l 28EF4 14
n 28EFE 15
about 28F08 16
n 28F12 17
R 28F1C 18
t 28F26 19
i 28F30 1A
--- Width 7
M 28F3A 1B
Р¤ 28F48 1C
w 28F56 1D

They did not fit into the table of links, we have 2 letters more than necessary. It can be added, but right after the symbol table are the numbers of the day. And before that are already unnecessary letters. Accordingly, I shift my table up 16 bytes and enter data into it by 29 letters. Then I look in the code for a link to the old beginning of the table: 28CB0 + 8004000 = 802CCB0 =>B0 CC 02 08. I find it at 14A30 and change it to my new offset 28РЎ98 =>98 CC 02 08. Now the letters will be counted correctly.
Next, I form and re-fill the table of the days of the week: "Mon" - 08 06 00, ... and the month table "Jan" - 0D 15 0F. I keep it. PROFIT
P.S. As an independent work. In the English version, "." Is displayed in the date code between the day of the week and the month. there is a direct link to it in the code. Since I shifted the link table up, the direct link led to a piece of the letter. Do not forget the link in the code to the space or other separator character we need.



The names of the icons in the program from lolex

I do not bear any responsibility for the clogged bracelets. Everything is at your own peril, risk and intuition. Unlike a phone, if the firmware is constipated, it will not work.
Picture


Post has been editedSirStefan - 17.10.17, 06:48
Reason for editing: Images 54 firmware



Rep: (918)
0x2BE5A, 72 * 40.


Full version    

Help     rules

Now: 08/17/19, 09:22