USMI

Объявление

12/06/2025 (Administration) - Spamming for the purpose of boosting messages will be punished with a ban. Спам с целью накрутки сообщений будет караться баном.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » MagicJL SYS / MagicJL PLUS — Custom Firmware for JieLi AC6925A / BT201


MagicJL SYS / MagicJL PLUS — Custom Firmware for JieLi AC6925A / BT201

Сообщений 1 страница 8 из 8

1

Hello everyone!

After a long period of studying the JieLi AC6925A SDK and experimenting with the BT201 platform, I decided to finally release my custom firmware project: **MagicJL SYS / MagicJL PLUS**.

The project started as an attempt to learn the JieLi SDK and build a proper interface for an SSD1306 128×64 OLED. Over time, it grew into a substantially redesigned firmware with a custom launcher, applications, audio features, recording, multilingual support, and many fixes to the original SDK/application behavior.

The main target is the JieLi AC6925A / BT201 with an SSD1306 128×64 monochrome OLED.

--Main Features--

Music Player

The firmware includes a redesigned music player and file browser with:

* USB music playback
* File browser
* Long filename support
* Playback-position preservation
* Repeat modes
* Hardware EQ
* Bass Boost
* Bass Gain adjustment up to +12 dB
* Speed / Pitch adjustment
* Custom navigation
* USB storage support

At the moment I am primarily testing USB playback, because the SD-card socket on my development board is currently broken/unsoldered.

Several problems in the original SDK filesystem/application behavior also had to be worked around.

For example, under certain circumstances directory long filenames could be lost and replaced with short names such as `KENDRI~1`. The firmware now contains an application-level compensation mechanism that caches and restores the correct directory name while keeping storage devices and paths separated.

Another issue affected the cold file-browser path: when the browser was opened for the first time while music was playing, the current song could restart from the beginning. The firmware now preserves the current playback position while the browser performs its initial scan and restores playback afterwards.

Spectrum Analyzer

A custom spectrum analyzer has been implemented.

It uses:

* 128-point fixed-point FFT
* Q15 processing
* Hann window
* 16 logarithmically spaced frequency bands
* Fast attack
* Slow decay
* Peak hold
* PCM capture from the audio path

The analyzer is integrated with the music task and global key/event system.

It can be entered from the firmware UI and exited immediately with a key press.

Recording

A complete recording mode has also been added using the native recording functionality provided by the JieLi SDK.

The controls are:

| Key            | Short press      | Hold        |
| -------------- | ---------------- | ----------- |
| Mode (06)      | Exit to Carousel | —           |
| Next / + (07)  | Stop recording   | Volume Up   |
| Prev / − (08)  | Pause / Resume   | Volume Down |
| Play / OK (09) | Start recording  | —           |

Recordings are stored in the `JL_REC` directory.

Recording and playback of the resulting files have been tested successfully on real hardware.

FM Radio

FM Radio is integrated into the Carousel and the custom UI.

The FM icon placement was also corrected so that the stock icon no longer overlaps the title on the 128×64 display.

Bluetooth

Bluetooth is integrated into the Carousel and custom task-switching system.

Several problems in the original task-switching behavior were fixed.

One example was `TASK_ID_BT == 0`: the original logic treated task ID 0 as if it meant "no task", which prevented Bluetooth from being entered correctly from the Carousel.

Carousel Launcher

The standard launcher/navigation has been replaced with a custom Carousel interface.

The Carousel provides access to the main firmware modes, including:

* Music
* Bluetooth
* FM Radio
* Recording
* System Settings
* Other applications and modes

Several unwanted automatic task switches from the original firmware were also removed.

For example, connecting a USB device no longer automatically throws the user out of the Carousel and into Music.

System Settings

A dedicated System Settings interface was created specifically for the 128×64 OLED.

Current settings include:

* Language
* UI Type
* Contrast
* Version
* Exit

Volume UI Type

Two volume display styles are currently available:

* Numerical
* Zipper type

The selected UI type is stored in VM storage and survives reboot.

The Numerical mode uses the existing JieLi resources for the speaker icon and numerical digits.

Languages

A global language system has been integrated into the firmware.

Language selection affects multiple parts of the UI, including:

* Carousel
* System Settings
* Bluetooth
* FM Radio
* Music Context Menu
* File Browser
* EQ Settings
* Repeat Mode
* Effects
* Other UI elements

Currently implemented languages include:

* English
* Turkish
* German
* French
* Spanish
* Italian
* Portuguese
* Russian

Some other languages supported by the JieLi UI system require additional PIX/font resources.

Japanese, Korean, Arabic, Thai, Hebrew, Chinese and some other languages are therefore left for later until the required PIX files become available.

The firmware already has the language infrastructure in place; the remaining problem for these languages is mainly obtaining the appropriate JieLi font/resource files.

Pioneer Dolphin Demo

The firmware contains a small Pioneer Dolphin demo / Easter egg.

The original implementation contained more animation material, but some scenes were removed to save flash space.

The current version contains **two animations/scenes**.

The demo is launched globally with a long press of Play/Pause and can be interrupted with a key press.

The animation data is stored in flash rather than consuming additional SRAM.

Persistent Settings

User settings are stored using the JieLi VM storage system.

This includes settings such as:

* Language
* Volume UI type
* Other interface settings

Settings are restored after reboot.

OLED User Interface
The entire custom UI is designed around the SSD1306 128×64 monochrome OLED.

The interface includes custom implementations of:

* Lists
* Selection/highlight rows
* Scrollbars
* Triangular selection markers
* Diamond bullets
* Volume overlays
* Numerical volume display
* Carousel navigation
* Status screens
* Application-specific screens

Where practical, existing JieLi SDK mechanisms and resources are reused rather than replacing the entire graphics system.

SDK / Application Fixes

A significant part of the project was not simply adding new screens, but fixing or changing behavior in the original SDK application layer.

Some examples:

* USB hotplug automatically switching to Music
* Bluetooth task switching failing because task ID 0 was treated as inactive
* Incorrect fallback task switching
* Current track restarting when the file browser was opened from a cold state
* Directory long filename loss
* Stock volume popup interfering with the Carousel
* Incorrect FM icon placement
* Font initialization problems after changing language
* Global key/event routing issues
* Several task-switching and navigation problems

The goal was to keep the underlying JieLi SDK functionality where it works well, while replacing or correcting the parts that don't fit the custom UI.

Firmware Size

The firmware still fits inside the AC6925A's internal flash.

One of the recent builds was approximately:

* `jl_692x.bin` — 467 KB
* `updata.bfu` — 467 KB
* RAM0 usage — approximately 68.6 KB / 69.1 KB
* RAM0 headroom — approximately 1 KB

The firmware is already fairly tightly packed, so flash and RAM usage have been an important part of development.

Hardware Testing

The project is developed and tested directly on real BT201 / AC6925A hardware with an SSD1306 128×64 OLED.

The following features have been tested on hardware:

* Music playback
* USB playback
* File Browser
* Long filenames
* Bluetooth
* FM Radio
* Carousel
* System Settings
* Language switching
* Numerical / Zipper volume
* Spectrum Analyzer
* Pioneer Dolphin demo
* Recording
* Recording playback
* Persistent settings

The current storage testing is focused on USB because the SD-card socket on my development board is broken/unsoldered.

Current Status

At this point I consider the firmware ready for release as a usable custom firmware project.

There are still things I want to add in the future, but I don't want to hold the release back for them.

Some planned future work includes:

* Additional language support once the required PIX files are available
* Further Spectrum Analyzer improvements
* Additional Recording features
* FM presets
* More diagnostic/developer functionality
* Further UI improvements

Thanks

Special thanks to the USMI community for the JieLi SDKs, tools, documentation, reverse-engineering work, and the information shared throughout the forum.

A lot of the AC6925A work would have been considerably more difficult without the resources and discussions available here.
Thanks to BIOS
Thanks to kagaimiq
Thanks to amateur
and Thanks to all the people in this forum.

MagicJL SYS / MagicJL PLUS

Custom firmware for JieLi AC6925A / BT201
SSD1306 128×64 OLED

---Pictures--
https://upforme.ru/uploads/001b/ca/8a/339/t217709.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t328212.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t653475.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t355232.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t133848.jpg
https://upforme.ru/uploads/001b/ca/8a/339/t222326.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t490193.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t940058.jpg
https://upforme.ru/uploads/001b/ca/8a/339/t700930.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t140342.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t387065.jpg
https://upforme.ru/uploads/001b/ca/8a/339/t853310.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t817930.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t138494.jpg
https://upforme.ru/uploads/001b/ca/8a/339/t579788.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t985709.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t48344.jpg
https://upforme.ru/uploads/001b/ca/8a/339/t974315.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t719793.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t868561.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t64796.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t897606.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t664265.jpg



---LINK---
--Password is 1111--

https://drive.google.com/file/d/1iSx3Fa … drive_link

Подпись автора

Türkiye

2

круто!
А как с этой проблемой?
Подключение разной периферии к JL SoC. SPI/I2C/I2S/PWM/UART/GPIO...

3

amateur написал(а):

круто!
А как с этой проблемой?
Подключение разной периферии к JL SoC. SPI/I2C/I2S/PWM/UART/GPIO...

Пока на эту проблему я не обратил внимания. В моей прошивке русский, немецкий, турецкий и другие языки интерфейса уже работают, но с UTF-16 именами файлов и `font_OtherLanguage` я пока отдельно не разбирался. Сейчас как раз жду PIX/TAB-файлы для некоторых языков, так что после этого можно будет попробовать разобраться и с этой проблемой.

Подпись автора

Türkiye

4

amateur написал(а):

круто!
А как с этой проблемой?
Подключение разной периферии к JL SoC. SPI/I2C/I2S/PWM/UART/GPIO...

Проверил эту проблему и заодно исправил её в своей прошивке.

Похоже, проблема действительно связана с обработкой UTF-16 имён файлов через `ui_text()` и TAB. Этот код находится в закрытой библиотеке, поэтому исправить сам парсер TAB напрямую не получается.

Я сделал обработку UTF-16 имён файлов на уровне приложения и использовал собственную таблицу `font_hi` для вывода символов. Теперь кириллица нормально отображается и на экране проигрывателя, и в файловом браузере.

Уже проверил на железе:

* после холодного запуска всё работает;
* после переключения режимов тоже работает;
* русские имена файлов отображаются нормально;
* папки и файлы с кириллицей тоже работают.

Например, `Привет.mp3` отображается корректно.

Также проверил несколько латинских символов. Испанское имя `Cheo Gallego - El Anciano y El Niño` отображается нормально. С немецким `LEGENDÄR` обнаружил только то, что для `Ä` в моей текущей таблице шрифта нет отдельного глифа, поэтому сейчас он заменяется на `A`. Это уже не проблема UTF-16/TAB, а просто ограничение моей маленькой таблицы `font_hi`.

Если хотите, могу выложить тестовую прошивку, чтобы вы могли проверить её у себя на разных UTF-16 именах файлов.
https://upforme.ru/uploads/001b/ca/8a/339/t899045.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t119303.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t24683.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t904561.jpg
https://upforme.ru/uploads/001b/ca/8a/339/t116839.jpg

Подпись автора

Türkiye

5

интересно было бы посмотреть код

6

amateur написал(а):

интересно было бы посмотреть код

Конечно, надеюсь, завтра уже смогу выложить код для просмотра и тестирования.

Подпись автора

Türkiye

7

New Firmware (Multi-Language & Custom UI Update)
MagicJL SYS / MagicJL PLUS
Please read the changelog for more info.

Changelog

Multi-language File Name & Font Support

What's new / fixed:
[list]
[*]Cyrillic & European file/folder names now display correctly — fully supported on both the now-playing (player) screen and the file browser / context menu.
[*]Fixed reboot & garbage character bug: non-Latin file names (e.g. Russian, German umlauts) previously caused garbled output on screen or triggered hard CPU reboots. That is completely eliminated.
[*]Dual-engine text rendering for maximum stability:

  [*]Standard English/ASCII names render using the stock 16px system font via the native ANSI path for a factory-clean look.
  [*]Non-ASCII names (Cyrillic, accented Latin) seamlessly route to our dedicated 5×7 font_hi renderer, directly blitted into the OLED buffer with page alignment to prevent any memory corruption or crash.

[*]Supported scripts: full European Latin — German (ä ö ü ß …), French, Spanish, Portuguese, Italian, Turkish, Polish, Czech, Slovak, Romanian, Hungarian, Nordic, Dutch, Baltic — plus full Cyrillic (Russian).
[*]Not yet supported: CJK (Chinese / Japanese / Korean), Arabic, Hebrew, Thai, Greek — unsupported characters safely fall back to “?”.

How it was done (technical):

[*]Root cause identified: the stock ui_text() UTF-16 → code-page conversion path (the .TAB parser inside the closed-source uicon bitcode library) miscalculates offsets on non-ASCII characters, triggering invalid memory reads and rebooting the AC6925A. Because this code lives in precompiled binary libraries, it cannot be patched in C source.
[*]Direct-to-framebuffer bypass: UTF-16LE long file names are converted in our custom layer to an internal 8-bit codepage. Non-ASCII strings bypass the closed library completely and render straight into the SSD1306 OLED display buffer, guaranteeing 100% crash immunity.
[*]Zero Flash bloat: international glyph tables are stored directly in flash .rodata, keeping font initialization on the minimal stub. No external 50KB+ font packs or separate CP1251 PIX files need to be flashed.
[*]Pixel-perfect layout: on-screen text coordinates and bounding boxes match the original control definitions from ui_sty.sty, ensuring text and folder icons align cleanly.

Also,if you encounter a bug,a wrong character etc. or a recommendation,please write/report it here.

-------LINK------
Password is 1111
https://drive.google.com/file/d/1PeqEBv … sp=sharing
The SDK has the updata.bfu ready to flash/has been compiled and tested on hardware. But please dont refrain of writing about bugs,reccomendation etc.

Pictures:
https://upforme.ru/uploads/001b/ca/8a/339/t376148.jpghttps://upforme.ru/uploads/001b/ca/8a/339/t599462.jpg
https://upforme.ru/uploads/001b/ca/8a/339/t982876.jpg

Отредактировано barbaror4 (2026-09-21 18:29:29)

Подпись автора

Türkiye

8

I am planning to implement the CJK/RTL languages. The main limitation is the flash size of BT201(AC6925A/B),it is 512k,i have deleted 2 demo scenes in order to save space. But wasnt really enough. So,i am thinking of these ways.
1.Implement the languages directly as a special font table(Which isnt really practical considering languages like Chinese and Japanese have different subtypes etc.).
2.Attach a SPI Flash to PC3-PC5(Seems like would be the best for long term,will be optional,if the person wants chinese etc. They can attach the spi flash. But it comes with a tradeoff,which obviously is the SDCard.)
3.Make the languages/PIX files as Addons from USB or SDCard with a loader to ram(Which is kind of a good idea,but gottta dynamically change the language for different fileneames.).

I am leaning towards option 2.
So,any ideas? Or any reccomendations?
Thanks.

Отредактировано barbaror4 (2026-09-21 23:10:23)

Подпись автора

Türkiye


Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » MagicJL SYS / MagicJL PLUS — Custom Firmware for JieLi AC6925A / BT201