Showing preview only (5,809K chars total). Download the full file or copy to clipboard to get everything.
Repository: CTCaer/hekate
Branch: master
Commit: 94947672958d
Files: 424
Total size: 5.5 MB
Directory structure:
gitextract_s1mpgrgh/
├── .gitignore
├── LICENSE
├── Makefile
├── README.md
├── README_BOOTLOGO.md
├── Versions.inc
├── bdk/
│ ├── bdk.h
│ ├── display/
│ │ ├── di.c
│ │ ├── di.h
│ │ ├── di.inl
│ │ ├── vic.c
│ │ └── vic.h
│ ├── exception_handlers.S
│ ├── fatfs_cfg.h
│ ├── fatfs_conf.h
│ ├── gfx_utils.h
│ ├── ianos/
│ │ ├── elfload/
│ │ │ ├── elf.h
│ │ │ ├── elfarch.h
│ │ │ ├── elfload.c
│ │ │ ├── elfload.h
│ │ │ ├── elfreloc_aarch64.c
│ │ │ └── elfreloc_arm.c
│ │ ├── ianos.c
│ │ └── ianos.h
│ ├── input/
│ │ ├── als.c
│ │ ├── als.h
│ │ ├── joycon.c
│ │ ├── joycon.h
│ │ ├── touch.c
│ │ └── touch.h
│ ├── libs/
│ │ ├── compr/
│ │ │ ├── blz.c
│ │ │ ├── blz.h
│ │ │ ├── lz.c
│ │ │ ├── lz.h
│ │ │ ├── lz4.c
│ │ │ └── lz4.h
│ │ ├── fatfs/
│ │ │ ├── diskio.h
│ │ │ ├── ff.c
│ │ │ ├── ff.h
│ │ │ ├── ffsystem.c
│ │ │ └── ffunicode.c
│ │ ├── lv_conf.h
│ │ └── lvgl/
│ │ ├── docs/
│ │ │ ├── CODE_OF_CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── astyle_c
│ │ │ └── astyle_h
│ │ ├── licence.txt
│ │ ├── lv_core/
│ │ │ ├── lv_core.mk
│ │ │ ├── lv_group.c
│ │ │ ├── lv_group.h
│ │ │ ├── lv_indev.c
│ │ │ ├── lv_indev.h
│ │ │ ├── lv_lang.c
│ │ │ ├── lv_lang.h
│ │ │ ├── lv_obj.c
│ │ │ ├── lv_obj.h
│ │ │ ├── lv_refr.c
│ │ │ ├── lv_refr.h
│ │ │ ├── lv_style.c
│ │ │ ├── lv_style.h
│ │ │ ├── lv_vdb.c
│ │ │ └── lv_vdb.h
│ │ ├── lv_draw/
│ │ │ ├── lv_draw.c
│ │ │ ├── lv_draw.h
│ │ │ ├── lv_draw.mk
│ │ │ ├── lv_draw_arc.c
│ │ │ ├── lv_draw_arc.h
│ │ │ ├── lv_draw_img.c
│ │ │ ├── lv_draw_img.h
│ │ │ ├── lv_draw_label.c
│ │ │ ├── lv_draw_label.h
│ │ │ ├── lv_draw_line.c
│ │ │ ├── lv_draw_line.h
│ │ │ ├── lv_draw_rbasic.c
│ │ │ ├── lv_draw_rbasic.h
│ │ │ ├── lv_draw_rect.c
│ │ │ ├── lv_draw_rect.h
│ │ │ ├── lv_draw_triangle.c
│ │ │ ├── lv_draw_triangle.h
│ │ │ ├── lv_draw_vbasic.c
│ │ │ └── lv_draw_vbasic.h
│ │ ├── lv_fonts/
│ │ │ ├── hekate_symbol_120.c
│ │ │ ├── hekate_symbol_20.c
│ │ │ ├── hekate_symbol_30.c
│ │ │ ├── interui_20.c
│ │ │ ├── interui_30.c
│ │ │ ├── lv_font_builtin.c
│ │ │ ├── lv_font_builtin.h
│ │ │ ├── lv_fonts.mk
│ │ │ └── ubuntu_mono.c
│ │ ├── lv_hal/
│ │ │ ├── lv_hal.h
│ │ │ ├── lv_hal.mk
│ │ │ ├── lv_hal_disp.c
│ │ │ ├── lv_hal_disp.h
│ │ │ ├── lv_hal_indev.c
│ │ │ ├── lv_hal_indev.h
│ │ │ ├── lv_hal_tick.c
│ │ │ └── lv_hal_tick.h
│ │ ├── lv_misc/
│ │ │ ├── lv_anim.c
│ │ │ ├── lv_anim.h
│ │ │ ├── lv_area.c
│ │ │ ├── lv_area.h
│ │ │ ├── lv_circ.c
│ │ │ ├── lv_circ.h
│ │ │ ├── lv_color.c
│ │ │ ├── lv_color.h
│ │ │ ├── lv_font.c
│ │ │ ├── lv_font.h
│ │ │ ├── lv_fs.c
│ │ │ ├── lv_fs.h
│ │ │ ├── lv_gc.c
│ │ │ ├── lv_gc.h
│ │ │ ├── lv_ll.c
│ │ │ ├── lv_ll.h
│ │ │ ├── lv_log.c
│ │ │ ├── lv_log.h
│ │ │ ├── lv_math.c
│ │ │ ├── lv_math.h
│ │ │ ├── lv_mem.c
│ │ │ ├── lv_mem.h
│ │ │ ├── lv_misc.mk
│ │ │ ├── lv_symbol_def.h
│ │ │ ├── lv_task.c
│ │ │ ├── lv_task.h
│ │ │ ├── lv_templ.c
│ │ │ ├── lv_templ.h
│ │ │ ├── lv_txt.c
│ │ │ ├── lv_txt.h
│ │ │ ├── lv_ufs.c
│ │ │ └── lv_ufs.h
│ │ ├── lv_objx/
│ │ │ ├── lv_arc.c
│ │ │ ├── lv_arc.h
│ │ │ ├── lv_bar.c
│ │ │ ├── lv_bar.h
│ │ │ ├── lv_btn.c
│ │ │ ├── lv_btn.h
│ │ │ ├── lv_btnm.c
│ │ │ ├── lv_btnm.h
│ │ │ ├── lv_calendar.c
│ │ │ ├── lv_calendar.h
│ │ │ ├── lv_canvas.c
│ │ │ ├── lv_canvas.h
│ │ │ ├── lv_cb.c
│ │ │ ├── lv_cb.h
│ │ │ ├── lv_chart.c
│ │ │ ├── lv_chart.h
│ │ │ ├── lv_cont.c
│ │ │ ├── lv_cont.h
│ │ │ ├── lv_ddlist.c
│ │ │ ├── lv_ddlist.h
│ │ │ ├── lv_gauge.c
│ │ │ ├── lv_gauge.h
│ │ │ ├── lv_img.c
│ │ │ ├── lv_img.h
│ │ │ ├── lv_imgbtn.c
│ │ │ ├── lv_imgbtn.h
│ │ │ ├── lv_kb.c
│ │ │ ├── lv_kb.h
│ │ │ ├── lv_label.c
│ │ │ ├── lv_label.h
│ │ │ ├── lv_led.c
│ │ │ ├── lv_led.h
│ │ │ ├── lv_line.c
│ │ │ ├── lv_line.h
│ │ │ ├── lv_list.c
│ │ │ ├── lv_list.h
│ │ │ ├── lv_lmeter.c
│ │ │ ├── lv_lmeter.h
│ │ │ ├── lv_mbox.c
│ │ │ ├── lv_mbox.h
│ │ │ ├── lv_objx.mk
│ │ │ ├── lv_objx_templ.c
│ │ │ ├── lv_objx_templ.h
│ │ │ ├── lv_page.c
│ │ │ ├── lv_page.h
│ │ │ ├── lv_preload.c
│ │ │ ├── lv_preload.h
│ │ │ ├── lv_roller.c
│ │ │ ├── lv_roller.h
│ │ │ ├── lv_slider.c
│ │ │ ├── lv_slider.h
│ │ │ ├── lv_spinbox.c
│ │ │ ├── lv_spinbox.h
│ │ │ ├── lv_sw.c
│ │ │ ├── lv_sw.h
│ │ │ ├── lv_ta.c
│ │ │ ├── lv_ta.h
│ │ │ ├── lv_table.c
│ │ │ ├── lv_table.h
│ │ │ ├── lv_tabview.c
│ │ │ ├── lv_tabview.h
│ │ │ ├── lv_tileview.c
│ │ │ ├── lv_tileview.h
│ │ │ ├── lv_win.c
│ │ │ └── lv_win.h
│ │ ├── lv_themes/
│ │ │ ├── lv_theme.c
│ │ │ ├── lv_theme.h
│ │ │ ├── lv_theme_hekate.c
│ │ │ ├── lv_theme_hekate.h
│ │ │ └── lv_themes.mk
│ │ ├── lv_version.h
│ │ ├── lvgl.h
│ │ └── lvgl.mk
│ ├── mem/
│ │ ├── emc_t210.h
│ │ ├── heap.c
│ │ ├── heap.h
│ │ ├── mc.c
│ │ ├── mc.h
│ │ ├── mc_t210.h
│ │ ├── minerva.c
│ │ ├── minerva.h
│ │ ├── mtc_table.h
│ │ ├── sdram.c
│ │ ├── sdram.h
│ │ ├── sdram_config.inl
│ │ ├── sdram_config_t210b01.inl
│ │ ├── sdram_param_t210.h
│ │ ├── sdram_param_t210b01.h
│ │ ├── smmu.c
│ │ └── smmu.h
│ ├── memory_map.h
│ ├── module.h
│ ├── power/
│ │ ├── bm92t36.c
│ │ ├── bm92t36.h
│ │ ├── bq24193.c
│ │ ├── bq24193.h
│ │ ├── max17050.c
│ │ ├── max17050.h
│ │ ├── max77620.h
│ │ ├── max7762x.c
│ │ ├── max7762x.h
│ │ ├── max77812.h
│ │ ├── regulator_5v.c
│ │ └── regulator_5v.h
│ ├── rtc/
│ │ ├── max77620-rtc.c
│ │ └── max77620-rtc.h
│ ├── sec/
│ │ ├── se.c
│ │ ├── se.h
│ │ ├── se_t210.h
│ │ ├── tsec.c
│ │ ├── tsec.h
│ │ └── tsec_t210.h
│ ├── soc/
│ │ ├── actmon.c
│ │ ├── actmon.h
│ │ ├── bpmp.c
│ │ ├── bpmp.h
│ │ ├── ccplex.c
│ │ ├── ccplex.h
│ │ ├── clock.c
│ │ ├── clock.h
│ │ ├── fuse.c
│ │ ├── fuse.h
│ │ ├── gpio.c
│ │ ├── gpio.h
│ │ ├── hw_init.c
│ │ ├── hw_init.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── irq.c
│ │ ├── irq.h
│ │ ├── kfuse.c
│ │ ├── kfuse.h
│ │ ├── pinmux.c
│ │ ├── pinmux.h
│ │ ├── pmc.c
│ │ ├── pmc.h
│ │ ├── pmc_t210.h
│ │ ├── t210.h
│ │ ├── timer.c
│ │ ├── timer.h
│ │ ├── uart.c
│ │ └── uart.h
│ ├── storage/
│ │ ├── emmc.c
│ │ ├── emmc.h
│ │ ├── mbr_gpt.h
│ │ ├── mmc_def.h
│ │ ├── nx_emmc_bis.c
│ │ ├── nx_emmc_bis.h
│ │ ├── ramdisk.c
│ │ ├── ramdisk.h
│ │ ├── sd.c
│ │ ├── sd.h
│ │ ├── sd_def.h
│ │ ├── sdmmc.c
│ │ ├── sdmmc.h
│ │ ├── sdmmc_driver.c
│ │ ├── sdmmc_driver.h
│ │ └── sdmmc_t210.h
│ ├── thermal/
│ │ ├── fan.c
│ │ ├── fan.h
│ │ ├── tmp451.c
│ │ └── tmp451.h
│ ├── usb/
│ │ ├── usb_descriptor_types.h
│ │ ├── usb_descriptors.c
│ │ ├── usb_gadget_hid.c
│ │ ├── usb_gadget_ums.c
│ │ ├── usb_t210.h
│ │ ├── usbd.c
│ │ ├── usbd.h
│ │ └── xusbd.c
│ └── utils/
│ ├── aarch64_util.h
│ ├── btn.c
│ ├── btn.h
│ ├── dirlist.c
│ ├── dirlist.h
│ ├── ini.c
│ ├── ini.h
│ ├── list.h
│ ├── sprintf.c
│ ├── sprintf.h
│ ├── tegra_bct.h
│ ├── tegra_bit.h
│ ├── types.h
│ ├── util.c
│ └── util.h
├── bootloader/
│ ├── config.c
│ ├── config.h
│ ├── frontend/
│ │ ├── fe_info.c
│ │ ├── fe_info.h
│ │ ├── fe_tools.c
│ │ └── fe_tools.h
│ ├── gfx/
│ │ ├── gfx.c
│ │ ├── gfx.h
│ │ ├── logos.c
│ │ ├── logos.h
│ │ ├── tui.c
│ │ └── tui.h
│ ├── hos/
│ │ ├── hos.c
│ │ ├── hos.h
│ │ ├── hos_config.c
│ │ ├── hos_config.h
│ │ ├── pkg1.c
│ │ ├── pkg1.h
│ │ ├── pkg2.c
│ │ ├── pkg2.h
│ │ ├── pkg2_ini_kippatch.c
│ │ ├── pkg2_ini_kippatch.h
│ │ ├── pkg2_patches.inl
│ │ ├── pkg3.c
│ │ ├── pkg3.h
│ │ ├── secmon_exo.c
│ │ └── secmon_exo.h
│ ├── l4t/
│ │ ├── l4t.c
│ │ ├── l4t.h
│ │ └── l4t_config.inl
│ ├── libs/
│ │ └── fatfs/
│ │ ├── diskio.c
│ │ └── ffconf.h
│ ├── link.ld
│ ├── main.c
│ ├── start.S
│ └── storage/
│ ├── emummc.c
│ └── emummc.h
├── loader/
│ ├── Makefile
│ ├── link.ld
│ ├── loader.c
│ └── start.S
├── modules/
│ ├── hekate_libsys_lp0/
│ │ ├── Makefile
│ │ ├── pmc_t210.h
│ │ ├── sdram_lp0_param_t210.h
│ │ ├── sdram_lp0_param_t210b01.h
│ │ ├── sys_sdramlp0.c
│ │ ├── t210.h
│ │ └── types.h
│ ├── hekate_libsys_minerva/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── mtc.h
│ │ ├── mtc_mc_emc_regs.h
│ │ ├── mtc_switch_tables.h
│ │ ├── mtc_table.h
│ │ ├── sys_sdrammtc.c
│ │ └── types.h
│ └── simple_sample/
│ ├── Makefile
│ ├── gfx/
│ │ ├── gfx.c
│ │ └── gfx.h
│ └── module_sample.c
├── nyx/
│ ├── Makefile
│ ├── README_RES.md
│ └── nyx_gui/
│ ├── config.c
│ ├── config.h
│ ├── frontend/
│ │ ├── fe_emmc_tools.c
│ │ ├── fe_emmc_tools.h
│ │ ├── fe_emummc_tools.c
│ │ ├── fe_emummc_tools.h
│ │ ├── gui.c
│ │ ├── gui.h
│ │ ├── gui_emmc_tools.c
│ │ ├── gui_emmc_tools.h
│ │ ├── gui_emummc_tools.c
│ │ ├── gui_emummc_tools.h
│ │ ├── gui_info.c
│ │ ├── gui_info.h
│ │ ├── gui_options.c
│ │ ├── gui_options.h
│ │ ├── gui_tools.c
│ │ ├── gui_tools.h
│ │ ├── gui_tools_partition_manager.c
│ │ └── gui_tools_partition_manager.h
│ ├── gfx/
│ │ ├── gfx.c
│ │ ├── gfx.h
│ │ └── logos-gui.h
│ ├── hos/
│ │ ├── hos.c
│ │ ├── hos.h
│ │ ├── pkg1.c
│ │ ├── pkg1.h
│ │ ├── pkg2.c
│ │ └── pkg2.h
│ ├── libs/
│ │ └── fatfs/
│ │ ├── diskio.c
│ │ └── ffconf.h
│ ├── link.ld
│ ├── nyx.c
│ └── start.S
├── res/
│ ├── bootlogo/
│ │ └── bootlogo.psd
│ ├── hekate_ipl_template.ini
│ └── patches_template.ini
└── tools/
├── bin2c/
│ ├── Makefile
│ └── bin2c.c
├── emc.def
├── fix_regs.py
├── lz/
│ ├── Makefile
│ ├── lz.c
│ ├── lz.h
│ └── lz77.c
├── mc.def
└── smmu_payload.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.vs
.vscode
build/*
output/*
loader/payload_00.h
loader/payload_01.h
tools/bin2c/bin2c
tools/bin2c/bin2c.exe
tools/lz/lz77
tools/lz/lz77.exe
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
================================================
FILE: Makefile
================================================
ifeq ($(strip $(DEVKITARM)),)
$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
endif
include $(DEVKITARM)/base_rules
################################################################################
IPL_LOAD_ADDR := 0x40008000
IPL_MAGIC := 0x43544349 #"ICTC"
include ./Versions.inc
################################################################################
TARGET := hekate
BUILDDIR := build
BUILDTDIR := build/$(TARGET)
OUTPUTDIR := output
SOURCEDIR = bootloader
BDKDIR := bdk
BDKINC := -I./$(BDKDIR)
VPATH = $(dir ./$(SOURCEDIR)/) $(dir $(wildcard ./$(SOURCEDIR)/*/)) $(dir $(wildcard ./$(SOURCEDIR)/*/*/))
VPATH += $(dir $(wildcard ./$(BDKDIR)/)) $(dir $(wildcard ./$(BDKDIR)/*/)) $(dir $(wildcard ./$(BDKDIR)/*/*/))
# Track compiler flags
TRACK_CFLAGS = $(BUILDTDIR)/.cflags
TRACK_LDFLAGS = $(BUILDTDIR)/.ldflags
# Main and graphics.
OBJS = start exception_handlers main heap gfx logos tui fe_info fe_tools
# Hardware.
OBJS += bpmp ccplex clock di i2c irq timer \
mc sdram minerva smmu \
gpio pinmux pmc se tsec uart \
fuse kfuse \
sdmmc sdmmc_driver emmc sd emummc \
bq24193 max17050 max7762x max77620-rtc \
hw_init
# Utilities.
OBJS += btn dirlist ianos ini util config
# OS loaders.
OBJS += l4t hos hos_config pkg1 pkg2 pkg3 pkg2_ini_kippatch secmon_exo
# Libraries.
OBJS += lz lz4 blz diskio ff ffunicode ffsystem elfload elfreloc_arm
OBJS := $(addsuffix .o, $(OBJS))
OBJS := $(addprefix $(BUILDTDIR)/, $(OBJS))
GFX_INC := '"../$(SOURCEDIR)/gfx/gfx.h"'
FFCFG_INC := '"../$(SOURCEDIR)/libs/fatfs/ffconf.h"'
################################################################################
CUSTOMDEFINES := -DIPL_LOAD_ADDR=$(IPL_LOAD_ADDR) -DBL_MAGIC=$(IPL_MAGIC)
CUSTOMDEFINES += -DBL_VER_MJ=$(BLVERSION_MAJOR) -DBL_VER_MN=$(BLVERSION_MINOR) -DBL_VER_HF=$(BLVERSION_HOTFX) -DBL_VER_RL=$(BLVERSION_REL)
CUSTOMDEFINES += -DNYX_VER_MJ=$(NYXVERSION_MAJOR) -DNYX_VER_MN=$(NYXVERSION_MINOR) -DNYX_VER_HF=$(NYXVERSION_HOTFX) -DNYX_VER_RL=$(NYXVERSION_REL)
# BDK defines.
CUSTOMDEFINES += -DBDK_MALLOC_NO_DEFRAG -DBDK_EMUMMC_ENABLE
CUSTOMDEFINES += -DBDK_WATCHDOG_FIQ_ENABLE -DBDK_RESTART_BL_ON_WDT
CUSTOMDEFINES += -DGFX_INC=$(GFX_INC) -DFFCFG_INC=$(FFCFG_INC)
#CUSTOMDEFINES += -DDEBUG
# UART Logging: Max baudrate 12.5M.
# DEBUG_UART_PORT - 0: UART_A, 1: UART_B, 2: UART_C.
#CUSTOMDEFINES += -DDEBUG_UART_BAUDRATE=115200 -DDEBUG_UART_INVERT=0 -DDEBUG_UART_PORT=1
#TODO: Considering reinstating some of these when pointer warnings have been fixed.
WARNINGS := -Wall -Wsign-compare -Wtype-limits -Wno-array-bounds -Wno-stringop-overread -Wno-stringop-overflow
#-fno-delete-null-pointer-checks
#-Wstack-usage=byte-size -fstack-usage
ARCH := -march=armv4t -mtune=arm7tdmi -mthumb -mthumb-interwork $(WARNINGS)
CFLAGS = $(ARCH) -O2 -g -gdwarf-4 -nostdlib -ffunction-sections -fdata-sections -fomit-frame-pointer -fno-inline -std=gnu11 $(CUSTOMDEFINES)
LDFLAGS = $(ARCH) -nostartfiles -lgcc -Wl,--nmagic,--gc-sections -Xlinker --defsym=IPL_LOAD_ADDR=$(IPL_LOAD_ADDR)
MODULEDIRS := $(wildcard modules/*)
NYXDIR := $(wildcard nyx)
LDRDIR := $(wildcard loader)
TOOLSLZ := $(wildcard tools/lz)
TOOLSB2C := $(wildcard tools/bin2c)
TOOLS := $(TOOLSLZ) $(TOOLSB2C)
ifndef IPLECHO
T := $(shell $(MAKE) $(BUILDTDIR)/$(TARGET).elf --no-print-directory -nrRf $(firstword $(MAKEFILE_LIST)) IPLECHO="IPLOBJ" | grep -c "IPLOBJ")
N := x
C = $(words $N)$(eval N := x $N)
IPLECHO = echo -ne "\r`expr " [\`expr $C '*' 100 / $T\`" : '.*\(....\)$$'`%]\033[K"
endif
################################################################################
.PHONY: all clean $(LDRDIR) $(TOOLS) $(NYXDIR) $(MODULEDIRS)
all: $(TARGET).bin $(LDRDIR)
@printf ICTC49 >> $(OUTPUTDIR)/$(TARGET).bin
@echo "--------------------------------------"
@echo "$(TARGET) size:"
@echo -n "Uncompr: "
$(eval BIN_SIZE = $(shell wc -c < $(OUTPUTDIR)/$(TARGET)_unc.bin))
@echo $(BIN_SIZE)" Bytes"
@if [ ${BIN_SIZE} -gt 140288 ]; then echo "\e[1;33mUncompr size exceeds limit!\e[0m"; fi
@echo -n "Payload: "
$(eval BIN_SIZE = $(shell wc -c < $(OUTPUTDIR)/$(TARGET).bin))
@echo $(BIN_SIZE)" Bytes"
@if [ ${BIN_SIZE} -gt 126296 ]; then echo "\e[1;33mPayload size exceeds limit!\e[0m"; fi
@echo "--------------------------------------"
clean: $(TOOLS)
@rm -rf $(BUILDDIR)
@rm -rf $(OUTPUTDIR)
@$(MAKE) --no-print-directory -C $(LDRDIR) $(MAKECMDGOALS) -$(MAKEFLAGS)
$(MODULEDIRS): $(BUILDTDIR)/$(TARGET).elf
@$(MAKE) --no-print-directory -C $@ $(MAKECMDGOALS) -$(MAKEFLAGS)
$(NYXDIR): $(BUILDTDIR)/$(TARGET).elf $(MODULEDIRS)
@echo --------------------------------------
@$(MAKE) --no-print-directory -C $@ $(MAKECMDGOALS) -$(MAKEFLAGS)
$(LDRDIR): $(TARGET).bin $(TOOLS) $(NYXDIR) $(MODULEDIRS)
@$(TOOLSLZ)/lz77 $(OUTPUTDIR)/$(TARGET).bin
@mv $(OUTPUTDIR)/$(TARGET).bin $(OUTPUTDIR)/$(TARGET)_unc.bin
@mv $(OUTPUTDIR)/$(TARGET).bin.00.lz payload_00
@mv $(OUTPUTDIR)/$(TARGET).bin.01.lz payload_01
@$(TOOLSB2C)/bin2c payload_00 > $(LDRDIR)/payload_00.h
@$(TOOLSB2C)/bin2c payload_01 > $(LDRDIR)/payload_01.h
@rm payload_00
@rm payload_01
@$(MAKE) --no-print-directory -C $@ $(MAKECMDGOALS) -$(MAKEFLAGS) PAYLOAD_NAME=$(TARGET)
$(TOOLS):
@$(MAKE) --no-print-directory -C $@ $(MAKECMDGOALS) -$(MAKEFLAGS)
$(TARGET).bin: $(BUILDTDIR)/$(TARGET).elf
@$(OBJCOPY) -S -O binary $< $(OUTPUTDIR)/$@
@echo --------------------------------------
$(BUILDTDIR)/$(TARGET).elf: $(OBJS) $(TRACK_LDFLAGS)
@echo -ne "\r[100%] Linking $(TARGET).elf\033[K"
@$(CC) $(LDFLAGS) -T $(SOURCEDIR)/link.ld $(OBJS) -o $@
@printf "\n$(TARGET) was built with the following flags:\nCFLAGS: $(CFLAGS)\nLDFLAGS: $(LDFLAGS)\n"
$(BUILDTDIR)/%.o: %.c $(TRACK_CFLAGS) | $(BUILDTDIR)
@$(IPLECHO) Building $@
@$(CC) $(CFLAGS) $(BDKINC) -MMD -MP -c $< -o $@
$(BUILDTDIR)/%.o: %.S $(TRACK_CFLAGS) | $(BUILDTDIR)
@$(IPLECHO) Building $@
@$(CC) $(CFLAGS) -MMD -MP -c $< -o $@
$(BUILDTDIR):
@mkdir -p "$(BUILDDIR)"
@mkdir -p "$(BUILDTDIR)"
@mkdir -p "$(OUTPUTDIR)"
# Non objects change detectors.
$(TRACK_CFLAGS): $(BUILDTDIR)
@echo '$(CFLAGS)' | cmp -s - $@ || echo '$(CFLAGS)' > $@
$(TRACK_LDFLAGS): $(BUILDTDIR)
@echo '$(LDFLAGS)' | cmp -s - $@ || echo '$(LDFLAGS)' > $@
-include $(OBJS:.o=.d)
================================================
FILE: README.md
================================================
# hekate - Nyx

Custom Graphical Nintendo Switch bootloader, firmware patcher, tools, and many more.
- [Features](#features)
- [Bootloader folders and files](#bootloader-folders-and-files)
- [Bootloader configuration](#bootloader-configuration)
* [hekate global Configuration keys/values](#hekate-global-configuration-keysvalues-when-entry-is-config)
* [Boot entry key/value combinations](#boot-entry-keyvalue-combinations)
* [Boot entry key/value combinations for Exosphère](#boot-entry-keyvalue-combinations-for-exosphère)
* [Payload storage](#payload-storage)
* [Nyx Configuration keys/values](#nyx-configuration-keysvalues-nyxini)
## Features
- **Fully Configurable and Graphical** with Touchscreen and Joycon input support
- **Launcher Style, Background and Color Themes**
- **HOS (Switch OS) Bootloader** -- For CFW Sys/Emu, OFW Sys and Stock Sys
- **Android & Linux Bootloader**
- **Payload Launcher**
- **eMMC/emuMMC Backup/Restore Tools**
- **SD Card Partition Manager** -- Prepares and formats SD Card for any combo of HOS (Sys/emuMMC), Android and Linux
- **emuMMC Creation & Manager** -- Can also migrate and fix existing emuMMC
- **Switch Android & Linux flasher**
- **USB Mass Storage (UMS) for SD/eMMC/emuMMC** -- Converts Switch into a SD Card Reader
- **USB Gamepad** -- Converts Switch with Joycon into a USB HID Gamepad
- **Hardware and Peripherals info** (SoC, Fuses, RAM, Display, Touch, eMMC, SD, Battery, PSU, Charger)
- **Many other tools** like Archive Bit Fixer, Touch Calibration, SD/eMMC Benchmark, AutoRCM enabler and more
## Bootloader folders and files
| Folder/File | Description |
| ------------------------ | --------------------------------------------------------------------- |
| bootloader | Main folder. |
| \|__ bootlogo.bmp | It is used if no `logopath` key is found. User provided. Can be skipped. |
| \|__ hekate_ipl.ini | Main bootloader configuration and boot entries in `Launch` menu. |
| \|__ nyx.ini | Nyx GUI configuration |
| \|__ patches.ini | Add external patches. Can be skipped. A template can be found [here](./res/patches_template.ini) |
| \|__ update.bin | If newer, it is loaded at boot. Normally for modchips. Auto updated and created at first boot. |
| bootloader/ini/ | For individual inis. `More configs` menu. Autoboot is supported. |
| bootloader/res/ | Nyx user resources. Icons and more. |
| \|__ background.bmp | Nyx - Custom background. User provided. |
| \|__ icon_switch.bmp | Nyx - Default icon for CFWs. |
| \|__ icon_payload.bmp | Nyx - Default icon for Payloads. |
| bootloader/sys/ | hekate and Nyx system modules folder. !Important! |
| \|__ emummc.kipm | emuMMC KIP1 module. |
| \|__ libsys_lp0.bso | LP0 (sleep mode) module. |
| \|__ libsys_minerva.bso | Minerva Training Cell. Used for DRAM Frequency training. |
| \|__ nyx.bin | Nyx - hekate's GUI. |
| \|__ res.pak | Nyx resources package. |
| \|__ thk.bin | Atmosphère Tsec Hovi Keygen. |
| \|__ /l4t/ | Folder with firmware relevant to L4T (Linux/Android). |
| bootloader/screenshots/ | Folder where Nyx screenshots are saved |
| bootloader/payloads/ | For the `Payloads` menu. All CFW bootloaders, tools, Linux payloads are supported. Autoboot only supported by including them into an ini. |
| bootloader/libtools/ | Reserved |
## Bootloader configuration
The bootloader can be configured via `Nyx` -> `Options` or 'bootloader/hekate_ipl.ini'. The special section 'config' controls the actual global configuration. Any other ini section represents a boot entry and can only be edited manually via the ini.
There are four possible type of entries. "**[ ]**": Boot entry, "**{ }**": Caption, "**#**": Comment, "*newline*": .ini cosmetic newline.
**You can find a template [Here](./res/hekate_ipl_template.ini)**
### hekate Configuration keys/values (section *[config]*)
Use `Options` in Nyx to edit the following configuration:
| Config option | Description |
| ------------------ | -------------------------------------------------------------- |
| autoboot=0 | 0: Disable, #: Boot entry number to auto boot. |
| autoboot_list=0 | 0: Read `autoboot` boot entry from hekate_ipl.ini, 1: Read from ini folder (ini files are ASCII ordered). |
| bootwait=3 | 0: Disable (It also disables bootlogo. Having **VOL-** pressed since injection goes to menu.), #: Time to wait for **VOL-** to enter menu. Max: 20s. |
| autohosoff=1 | 0: Disable, 1: If woke up from HOS via an RTC alarm, shows logo, then powers off completely, 2: No logo, immediately powers off.|
| autonogc=1 | 0: Disable, 1: Automatically applies nogc patch if unburnt fuses found and a >= 4.0.0 HOS is booted. |
| updater2p=0 | 0: Disable, 1: Force updates (if needed) the reboot2payload binary to be hekate. |
| backlight=100 | Screen backlight level. 0-255. |
| ------------------ | --------- *The following can be edited via ini only* --------- |
| noticker=0 | 0: Animated line is drawn during custom bootlogo, signifying time left to skip to menu. 1: Disable. |
| bootprotect=0 | 0: Disable, 1: Protect bootloader folder from being corrupted by disallowing reading or editing in HOS. |
### Boot entry key/value combinations
A boot entry needs to be manually added/edited with the user's chosen key/value combos.
| Config option | Description |
| ---------------------- | ---------------------------------------------------------- |
| warmboot={FILE path} | Replaces the warmboot binary |
| secmon={FILE path} | Replaces the security monitor binary |
| kernel={FILE path} | Replaces the kernel binary |
| kip1={FILE path} | Replaces/Adds kernel initial process. Multiple can be set. |
| kip1={FOLDER path}/* | Loads every .kip/.kip1 inside a folder. Compatible with single kip1 keys. |
| pkg3={FILE path} | Takes an Atmosphere `package3` binary and `extracts` all needed parts from it. kips, exosphere, warmboot and mesophere. |
| fss0={FILE path} | Same as above. !Deprecated! |
| pkg3ex=1 | Enables loading of experimental content from a PKG3/FSS0 storage |
| pkg3kip1skip={KIP name} | Skips loading a kip from `pkg3`/`fss0`. Allows multiple and `,` as separator. The name must exactly match the name in `PKG3`. |
| exofatal={FILE path} | Replaces the exosphere fatal binary for Mariko |
| ---------------------- | ---------------------------------------------------------- |
| kip1patch=patchname | Enables a kip1 patch. Allows multiple and `,` as separator. If actual patch is not found, a warning will show up. |
| emupath={FOLDER path} | Forces emuMMC to use the selected one. (=emuMMC/RAW1, =emuMMC/SD00, etc). emuMMC must be created by hekate because it uses the raw_based/file_based files. |
| emummcforce=1 | Forces the use of emuMMC. If emummc.ini is disabled or not found, then it causes an error. |
| emummc_force_disable=1 | Disables emuMMC, if it's enabled. |
| stock=1 | OFW via hekate bootloader. Disables unneeded kernel patching and CFW kips when running stock. `If emuMMC is enabled, emummc_force_disable=1` is required. emuMMC is not supported on stock. If additional KIPs are needed other than OFW's, you can define them with `kip1` key. No kip should be used that relies on Atmosphère patching, because it will hang. If `NOGC` is needed, use `kip1patch=nogc`. |
| fullsvcperm=1 | Disables SVC verification (full services permission). Doesn't work with Mesosphere as kernel. |
| debugmode=1 | Enables Debug mode. Obsolete when used with exosphere as secmon. |
| kernelprocid=1 | Enables stock kernel process id send/recv patching. Not needed when `pkg3`/`fss0` is used. |
| ---------------------- | ---------------------------------------------------------- |
| payload={FILE path} | Payload launching. Tools, Android/Linux, CFW bootloaders, etc. Any key above when used with that, doesn't get into account. |
| ---------------------- | ---------------------------------------------------------- |
| l4t=1 | L4T Linux/Android native launching. |
| boot_prefixes={FOLDER path} | L4T bootstack directory. |
| ram_oc=0 | L4T RAM Overclocking. Check README_CONFIG.txt for more info. |
| ram_oc_vdd2=1100 | L4T RAM VDD2 Voltage. Set VDD2 (T210B01) or VDD2/VDDQ (T210) voltage. 1050-1175. |
| ram_oc_vddq=600 | L4T RAM VDDQ Voltage. Set VDDQ (T210B01). 550-650. |
| uart_port=0 | Enables logging on serial port for L4T uboot/kernel. |
| sld_type=0x31444C53 | Controls the type of seamless display support. 0x0: Disable, 0x31444C53: L4T seamless display. |
| Additional keys | Each distro supports more keys. Check README_CONFIG.txt for more info. |
| ---------------------- | ---------------------------------------------------------- |
| bootwait=3 | Overrides global bootwait from `[config]`. |
| id=IDNAME | Identifies boot entry for forced boot via id. Max 7 chars. |
| logopath={FILE path} | If it exists, it will load the specified bitmap. Otherwise `bootloader/bootlogo.bmp` will be used if exists |
| icon={FILE path} | Force Nyx to use the icon defined here. If this is not found, it will check for a bmp named as the boot entry ([Test 2] -> `bootloader/res/Test 2.bmp`). Otherwise defaults will be used. |
**Note1**: When using the wildcard (`/*`) with `kip1` you can still use the normal `kip1` after that to load extra single kips.
**Note2**: When using PKG3/FSS0 it parses exosphere, warmboot and all core kips. You can override the first 2 by using `secmon`/`warmboot` after defining `pkg3`/`fss0`.
You can define `kip1` to load an extra kip or many via the wildcard (`/*`) usage.
**Warning**: Careful when you override *pkg3/fss core* kips with `kip1`.
That's in case the kips are incompatible between them. If compatible, you can override `pkg3`/`fss0` kips with no issues (useful for testing with intermediate kip changes). In such cases, the `kip1` line must be **after** `pkg3`/`fss0` line.
### Boot entry key/value combinations for Exosphère
The following can be paired together with a HOS boot entry:
| Config option | Description |
| ---------------------- | ---------------------------------------------------------- |
| nouserexceptions=1 | Disables usermode exception handlers when paired with Exosphère. |
| userpmu=1 | Enables user access to PMU when paired with Exosphère. |
| cal0blank=1 | Overrides Exosphère config `blank_prodinfo_{sys/emu}mmc`. If that key doesn't exist, `exosphere.ini` will be used. |
| cal0writesys=1 | Overrides Exosphère config `allow_writing_to_cal_sysmmc`. If that key doesn't exist, `exosphere.ini` will be used. |
| usb3force=1 | Overrides system settings mitm config `usb30_force_enabled`. If that key doesn't exist, `system_settings.ini` will be used. |
| memmode=1 | Enables boot config memory mode for retail units. By default, max ram is limited to 4GB. Enabling this will automatically choose size. |
**Note**: `cal0blank`, `cal0writesys`, `usb3force`, as stated override the `exosphere.ini` or `system_settings.ini`. 0: Disable, 1: Enable, Key Missing: Use original value.
**Note2**: `blank_prodinfo_{sys/emu}mmc`, `allow_writing_to_cal_sysmmc` and `usb30_force_enabled` in `exosphere.ini` and `system_settings.ini` respectively, are the only atmosphere config keys that can affect hekate booting configuration externally, **if** the equivalent keys in hekate config are missing.
## Payload storage
hekate has a boot storage in the binary that helps it configure it outside of BPMP environment:
| Offset / Name | Description |
| ----------------------- | ----------------------------------------------------------------- |
| '0x94' boot_cfg | bit0: `Force AutoBoot`, bit1: `Show launch log`, bit2: `Boot from ID`, bit3: `Boot to emuMMC`. |
| '0x95' autoboot | If `Force AutoBoot`, 0: Force go to menu, else boot that entry. |
| '0x96' autoboot_list | If `Force AutoBoot` and `autoboot` then it boots from ini folder. |
| '0x97' extra_cfg | When menu is forced: bit5: `Run UMS`. |
| '0x98' xt_str[128] | Depends on the set cfg bits. |
| '0x98' ums[1] | When `Run UMS` is set, it will launch the selected UMS. 0: SD, 1/2/3: eMMC BOOT0/BOOT1/GPP, 4/5/6: emuMMC BOOT0/BOOT1/GPP, |
| '0x98' id[8] | When `Boot from ID` is set, it will search all inis automatically and find the boot entry with that id and boot it. Must be NULL terminated. |
| '0xA0' emummc_path[120] | When `Boot to emuMMC` is set, it will override the current emuMMC (boot entry or emummc.ini). Must be NULL terminated. |
## Nyx Configuration keys/values (nyx.ini)
Use `Nyx Settings` in Nyx to edit the following configuration:
| Config option | Description |
| ------------------ | ---------------------------------------------------------- |
| themebg=2d2d2d | Sets Nyx background color in HEX. 0x0B0B0B to 0xC7C7C7. |
| themecolor=167 | Sets Nyx color of text highlights. |
| entries5col=0 | 1: Sets Launch entry columns from 4 to 5 per line. For a total of 10 entries. |
| timeoffset=0 | Sets time offset in HEX. Must be in epoch format |
| timedst=1 | Enables automatic daylight saving hour adjustment |
| homescreen=0 | Sets home screen. 0: Home menu, 1: All configs (merges Launch and More configs), 2: Launch, 3: More Configs. |
| verification=1 | 0: Disable Backup/Restore verification, 1: Sparse (block based, fast and mostly reliable), 2: Full (sha256 based, slow and 100% reliable). |
| ------------------ | ----- *The following can be edited via nyx.ini only* ----- |
| umsemmcrw=0 | 1: eMMC/emuMMC UMS will be mounted as writable by default. |
| jcdisable=0 | 1: Disables Joycon driver completely. |
| jcforceright=0 | 1: Forces right joycon to be used as main mouse control. |
| bpmpclock=1 | 0: Auto, 1: 589 MHz, 2: 576 MHz, 3: 563 MHz, 4: 544 MHz, 5: 408 MHz. Use 2 to 5 if Nyx hangs or some functions like UMS/Backup Verification fail. |
```
hekate (c) 2018, naehrwert, st4rk.
(c) 2018-2026, CTCaer.
Nyx GUI (c) 2019-2026, CTCaer.
Thanks to: derrek, nedwill, plutoo, shuffle2, smea, thexyz, yellows8.
Greetings to: fincs, hexkyz, SciresM, Shiny Quagsire, WinterMute.
Open source and free packages used:
- Littlev Graphics Library,
Copyright (c) 2016-2018 Gabor Kiss-Vamosi
- FatFs R0.13c,
Copyright (c) 2006-2018, ChaN
Copyright (c) 2018-2022, CTCaer
- bcl-1.2.0,
Copyright (c) 2003-2006, Marcus Geelnard
- blz,
Copyright (c) 2018, SciresM
- elfload,
Copyright (c) 2014 Owen Shepherd,
Copyright (c) 2018 M4xw
___
.-' `'.
/ \
| ;
| | ___.--,
_.._ |0) = (0) | _.---'`__.-( (_.
__.--'`_.. '.__.\ '--. \_.-' ,.--'` `""`
( ,.--'` ',__ /./; ;, '.__.'` __
_`) ) .---.__.' / | |\ \__..--"" """--.,_
`---' .'.''-._.-'`_./ /\ '. \ _.--''````'''--._`-.__.'
| | .' _.-' | | \ \ '. `----`
\ \/ .' \ \ '. '-._)
\/ / \ \ `=.__`'-.
/ /\ `) ) / / `"".`\
, _.-'.'\ \ / / ( ( / /
`--'` ) ) .-'.' '.'. | (
(/` ( (` ) ) '-; [switchbrew]
```
================================================
FILE: README_BOOTLOGO.md
================================================
# hekate - Bootlogo
The bootlogo can be any size with a maximum of 720 x 1280.
When it's smaller than 720 x 1280, it is automatically centered and the background takes the color of the first pixel.
The process is to create a landscape bootlogo and then rotate it 90 degrees counterclockwise.
Lastly, the supported format is 32-bit (ARGB) BMP. Classic 24-bit (RGB) BMPs are not supported for performance reasons.
## How to configure
If a boot entry specifies a custom logo path (`logopath=`), this one will be loaded.
If the above is not found or the format is not correct, it will try to load `bootloader/bootlogo.bmp`.
If this is not found, the default hekate logo will be used.
(`bootloader/bootlogo.bmp` is basically like a global bootlogo.)
================================================
FILE: Versions.inc
================================================
# IPL Version.
BLVERSION_MAJOR := 6
BLVERSION_MINOR := 5
BLVERSION_HOTFX := 2
BLVERSION_REL := 0
# Nyx Version.
NYXVERSION_MAJOR := 1
NYXVERSION_MINOR := 9
NYXVERSION_HOTFX := 2
NYXVERSION_REL := 0
================================================
FILE: bdk/bdk.h
================================================
/*
* Copyright (c) 2022 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef BDK_H
#define BDK_H
#include <memory_map.h>
#include <display/di.h>
#include <display/vic.h>
#include <input/als.h>
#include <input/joycon.h>
#include <input/touch.h>
#include <mem/emc_t210.h>
#include <mem/heap.h>
#include <mem/mc.h>
#include <mem/minerva.h>
#include <mem/sdram.h>
#include <mem/smmu.h>
#include <module.h>
#include <power/bm92t36.h>
#include <power/bq24193.h>
#include <power/max17050.h>
#include <power/max77620.h>
#include <power/max7762x.h>
#include <power/max77812.h>
#include <power/regulator_5v.h>
#include <rtc/max77620-rtc.h>
#include <sec/se.h>
#include <sec/tsec.h>
#include <soc/actmon.h>
#include <soc/bpmp.h>
#include <soc/ccplex.h>
#include <soc/clock.h>
#include <soc/fuse.h>
#include <soc/gpio.h>
#include <soc/hw_init.h>
#include <soc/i2c.h>
#include <soc/irq.h>
#include <soc/kfuse.h>
#include <soc/pinmux.h>
#include <soc/pmc.h>
#include <soc/timer.h>
#include <soc/t210.h>
#include <soc/uart.h>
#include <storage/emmc.h>
#include <storage/mbr_gpt.h>
#include <storage/mmc_def.h>
#include <storage/nx_emmc_bis.h>
#include <storage/ramdisk.h>
#include <storage/sd.h>
#include <storage/sdmmc.h>
#include <thermal/fan.h>
#include <thermal/tmp451.h>
#include <usb/usbd.h>
#include <utils/aarch64_util.h>
#include <utils/btn.h>
#include <utils/dirlist.h>
#include <utils/ini.h>
#include <utils/list.h>
#include <utils/sprintf.h>
#include <utils/tegra_bct.h>
#include <utils/tegra_bit.h>
#include <utils/types.h>
#include <utils/util.h>
#include <gfx_utils.h>
#endif
================================================
FILE: bdk/display/di.c
================================================
/*
* Copyright (c) 2018 naehrwert
* Copyright (c) 2018-2025 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string.h>
#include "di.h"
#include <power/max77620.h>
#include <power/max7762x.h>
#include <soc/clock.h>
#include <soc/fuse.h>
#include <soc/gpio.h>
#include <soc/hw_init.h>
#include <soc/pinmux.h>
#include <soc/pmc.h>
#include <soc/timer.h>
#include <soc/t210.h>
#include <utils/util.h>
#include "di.inl"
static bool _nx_aula = false;
static u32 _panel_id = 0;
static u32 _panel_id_raw = 0;
static void _display_panel_and_hw_end(bool no_panel_deinit);
void display_enable_interrupt(u32 intr)
{
DISPLAY_A(DC_CMD_INT_ENABLE) |= intr;
}
void display_disable_interrupt(u32 intr)
{
DISPLAY_A(DC_CMD_INT_ENABLE) &= ~intr;
DISPLAY_A(DC_CMD_INT_STATUS) = intr;
}
void display_wait_interrupt(u32 intr)
{
DISPLAY_A(DC_CMD_INT_STATUS) = intr;
// Interrupts are masked. Poll status register for checking if fired.
while (!(DISPLAY_A(DC_CMD_INT_STATUS) & intr))
;
}
static void _display_dsi_wait(u32 timeout, u32 off, u32 mask)
{
u32 end = get_tmr_us() + timeout * 1000;
while (get_tmr_us() < end && DSI(off) & mask)
;
usleep(5);
}
static void _display_dsi_soft_reset()
{
// Disable DSI interface.
DSI(DSI_POWER_CONTROL) = 0;
// Settle time.
usleep(10);
}
static void _display_dsi_send_cmd(u8 cmd, u32 param, u32 wait)
{
DSI(DSI_WR_DATA) = (param << 8) | cmd;
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
if (wait)
usleep(wait);
}
static void _display_dsi_wait_vblank(bool enable)
{
if (enable)
{
// Enable vblank interrupt.
display_enable_interrupt(DC_CMD_INT_FRAME_END_INT);
// Use the 4th line to transmit the host cmd packet.
DSI(DSI_VIDEO_MODE_CONTROL) = DSI_CMD_PKT_VID_ENABLE | DSI_DSI_LINE_TYPE(4);
// Wait for vblank before starting the transfer.
display_wait_interrupt(DC_CMD_INT_FRAME_END_INT);
}
else
{
// Wait for vblank before resetting sync points.
display_wait_interrupt(DC_CMD_INT_FRAME_END_INT);
usleep(14);
// Reset all states of syncpt block.
DSI(DSI_INCR_SYNCPT_CNTRL) = DSI_INCR_SYNCPT_SOFT_RESET;
usleep(300); // Stabilization delay.
// Clear syncpt block reset.
DSI(DSI_INCR_SYNCPT_CNTRL) = 0;
usleep(300); // Stabilization delay.
// Restore video mode and host control.
DSI(DSI_VIDEO_MODE_CONTROL) = 0;
// Disable and clear vblank interrupt.
display_disable_interrupt(DC_CMD_INT_FRAME_END_INT);
}
}
static void _display_dsi_read_rx_fifo(u32 *data)
{
u32 fifo_count = DSI(DSI_STATUS) & DSI_STATUS_RX_FIFO_SIZE;
if (fifo_count)
DSI(DSI_TRIGGER) = 0;
for (u32 i = 0; i < fifo_count; i++)
{
// Read or Drain RX FIFO.
if (data)
data[i] = DSI(DSI_RD_DATA);
else
(void)DSI(DSI_RD_DATA);
}
}
int display_dsi_read(u8 cmd, u32 len, void *data)
{
u32 fifo[DSI_STATUS_RX_FIFO_SIZE] = {0};
// Drain RX FIFO.
_display_dsi_read_rx_fifo(NULL);
// Set reply size.
_display_dsi_send_cmd(MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE, len, 0);
_display_dsi_wait(250, DSI_TRIGGER, DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
// Request register read.
_display_dsi_send_cmd(MIPI_DSI_DCS_READ, cmd, 0);
_display_dsi_wait(250, DSI_TRIGGER, DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
// Transfer bus control to device for transmitting the reply.
DSI(DSI_HOST_CONTROL) |= DSI_HOST_CONTROL_IMM_BTA;
// Wait for reply to complete. DSI_HOST_CONTROL_IMM_BTA bit acts as a DSI host read busy.
_display_dsi_wait(150, DSI_HOST_CONTROL, DSI_HOST_CONTROL_IMM_BTA);
// Wait a bit for the reply.
usleep(5000);
// Read RX FIFO.
_display_dsi_read_rx_fifo(fifo);
// Parse packet and copy over the data.
if ((fifo[0] & 0xFF) == DSI_ESCAPE_CMD)
{
// Act based on reply type.
switch (fifo[1] & 0xFF)
{
case GEN_LONG_RD_RES:
case DCS_LONG_RD_RES:
memcpy(data, &fifo[2], MIN((fifo[1] >> 8) & 0xFFFF, len));
break;
case GEN_1_BYTE_SHORT_RD_RES:
case DCS_1_BYTE_SHORT_RD_RES:
memcpy(data, &fifo[2], 1);
break;
case GEN_2_BYTE_SHORT_RD_RES:
case DCS_2_BYTE_SHORT_RD_RES:
memcpy(data, &fifo[2], 2);
break;
case ACK_ERROR_RES:
default:
return 1;
}
}
else
return 1;
return 0;
}
int display_dsi_vblank_read(u8 cmd, u32 len, void *data)
{
int res = 0;
u32 host_control = 0;
u32 fifo[DSI_STATUS_RX_FIFO_SIZE] = {0};
// Drain RX FIFO.
_display_dsi_read_rx_fifo(NULL);
// Save host control and enable host cmd packets during video.
host_control = DSI(DSI_HOST_CONTROL);
_display_dsi_wait_vblank(true);
// Set reply size.
_display_dsi_send_cmd(MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE, len, 0);
_display_dsi_wait(0, DSI_TRIGGER, DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
// Request register read.
_display_dsi_send_cmd(MIPI_DSI_DCS_READ, cmd, 0);
_display_dsi_wait(0, DSI_TRIGGER, DSI_TRIGGER_HOST | DSI_TRIGGER_VIDEO);
_display_dsi_wait_vblank(false);
// Transfer bus control to device for transmitting the reply.
DSI(DSI_HOST_CONTROL) |= DSI_HOST_CONTROL_IMM_BTA;
// Wait for reply to complete. DSI_HOST_CONTROL_IMM_BTA bit acts as a DSI host read busy.
_display_dsi_wait(150, DSI_HOST_CONTROL, DSI_HOST_CONTROL_IMM_BTA);
// Wait a bit for the reply.
usleep(5000);
// Read RX FIFO.
_display_dsi_read_rx_fifo(fifo);
// Parse packet and copy over the data.
if ((fifo[0] & 0xFF) == DSI_ESCAPE_CMD)
{
// Act based on reply type.
switch (fifo[1] & 0xFF)
{
case GEN_LONG_RD_RES:
case DCS_LONG_RD_RES:
memcpy(data, &fifo[2], MIN((fifo[1] >> 8) & 0xFFFF, len));
break;
case GEN_1_BYTE_SHORT_RD_RES:
case DCS_1_BYTE_SHORT_RD_RES:
memcpy(data, &fifo[2], 1);
break;
case GEN_2_BYTE_SHORT_RD_RES:
case DCS_2_BYTE_SHORT_RD_RES:
memcpy(data, &fifo[2], 2);
break;
case ACK_ERROR_RES:
default:
res = 1;
break;
}
}
else
res = 1;
// Restore host control.
DSI(DSI_HOST_CONTROL) = host_control;
return res;
}
void display_dsi_write(u8 cmd, u32 len, void *data)
{
u32 host_control;
u32 fifo32[DSI_STATUS_TX_FIFO_SIZE] = {0};
u8 *fifo8 = (u8 *)fifo32;
// Prepare data for long write.
if (len >= 2)
{
memcpy(&fifo8[5], data, len);
memset(&fifo8[5] + len, 0, len % sizeof(u32));
len++; // Increase length by CMD.
}
// Save host control.
host_control = DSI(DSI_HOST_CONTROL);
// Enable host transfer trigger.
DSI(DSI_HOST_CONTROL) = (host_control & ~(DSI_HOST_CONTROL_TX_TRIG_MASK)) | DSI_HOST_CONTROL_TX_TRIG_HOST;
switch (len)
{
case 0:
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, cmd, 0);
break;
case 1:
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE_PARAM, cmd | (*(u8 *)data << 8), 0);
break;
default:
fifo32[0] = (len << 8) | MIPI_DSI_DCS_LONG_WRITE;
fifo8[4] = cmd;
len += sizeof(u32); // Increase length by length word and DCS CMD.
for (u32 i = 0; i < (ALIGN(len, sizeof(u32)) / sizeof(u32)); i++)
DSI(DSI_WR_DATA) = fifo32[i];
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
break;
}
// Wait for the write to happen.
_display_dsi_wait(250, DSI_TRIGGER, DSI_TRIGGER_HOST);
// Restore host control.
DSI(DSI_HOST_CONTROL) = host_control;
}
void display_dsi_vblank_write(u8 cmd, u32 len, void *data)
{
u32 fifo32[DSI_STATUS_TX_FIFO_SIZE] = {0};
u8 *fifo8 = (u8 *)fifo32;
// Prepare data for long write.
if (len >= 2)
{
memcpy(&fifo8[5], data, len);
memset(&fifo8[5] + len, 0, len % sizeof(u32));
len++; // Increase length by CMD.
}
_display_dsi_wait_vblank(true);
switch (len)
{
case 0:
DSI(DSI_WR_DATA) = (cmd << 8) | MIPI_DSI_DCS_SHORT_WRITE;
break;
case 1:
DSI(DSI_WR_DATA) = ((cmd | (*(u8 *)data << 8)) << 8) | MIPI_DSI_DCS_SHORT_WRITE_PARAM;
break;
default:
fifo32[0] = (len << 8) | MIPI_DSI_DCS_LONG_WRITE;
fifo8[4] = cmd;
len += sizeof(u32); // Increase length by length word and DCS CMD.
for (u32 i = 0; i < (ALIGN(len, sizeof(u32)) / sizeof(u32)); i++)
DSI(DSI_WR_DATA) = fifo32[i];
break;
}
_display_dsi_wait_vblank(false);
}
void display_init()
{
// Get Hardware type, as it's used in various DI functions.
_nx_aula = fuse_read_hw_type() == FUSE_NX_HW_TYPE_AULA;
// Check if display is already initialized.
if (CLOCK(CLK_RST_CONTROLLER_CLK_OUT_ENB_L) & BIT(CLK_L_DISP1))
_display_panel_and_hw_end(true);
// Get Chip ID.
bool tegra_t210 = hw_get_chip_id() == GP_HIDREV_MAJOR_T210;
// Enable DSI AVDD.
max7762x_regulator_set_voltage(REGULATOR_LDO0, 1200000);
max7762x_regulator_enable(REGULATOR_LDO0, true);
// Enable Display Interface specific clocks.
CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_CLR) = BIT(CLK_H_MIPI_CAL) | BIT(CLK_H_DSI);
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_SET) = BIT(CLK_H_MIPI_CAL) | BIT(CLK_H_DSI);
CLOCK(CLK_RST_CONTROLLER_RST_DEV_L_CLR) = BIT(CLK_L_DISP1);
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_L_SET) = BIT(CLK_L_DISP1);
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_X_SET) = BIT(CLK_X_UART_FST_MIPI_CAL);
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_UART_FST_MIPI_CAL) = CLK_SRC_DIV(6); // Set PLLP_OUT3 and div 6 (17MHz).
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_W_SET) = BIT(CLK_W_DSIA_LP);
CLOCK(CLK_RST_CONTROLLER_CLK_SOURCE_DSIA_LP) = CLK_SRC_DIV(6); // Set PLLP_OUT and div 6 (68MHz).
// Bring every IO rail out of deep power down. (Though no rail bit is set.)
PMC(APBDEV_PMC_IO_DPD_REQ) = PMC_IO_DPD_REQ_DPD_OFF;
PMC(APBDEV_PMC_IO_DPD2_REQ) = PMC_IO_DPD_REQ_DPD_OFF;
// Configure LCD/WLED driver pins.
if (!_nx_aula)
{
// Configure LCD driver pins.
PINMUX_AUX(PINMUX_AUX_NFC_EN) = PINMUX_PULL_DOWN;
PINMUX_AUX(PINMUX_AUX_NFC_INT) = PINMUX_PULL_DOWN;
// Configure WLED driver pins.
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = PINMUX_PULL_DOWN;
PINMUX_AUX(PINMUX_AUX_LCD_BL_EN) = PINMUX_PULL_DOWN;
// Enable LCD driver AVDD channels (+5.4V CH2 EN, -5.4V CH1 EN).
gpio_direction_output(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_HIGH);
usleep(10000); // Wait minimum 4.2ms to stabilize.
// Configure WLED driver PWM/EN pins.
gpio_direction_output(GPIO_PORT_V, GPIO_PIN_0 | GPIO_PIN_1, GPIO_LOW);
// Enable WLED driver.
gpio_write(GPIO_PORT_V, GPIO_PIN_1, GPIO_HIGH);
}
// else
// {
// // Configure OLED status pin.
// PINMUX_AUX(PINMUX_AUX_WIFI_EN) = PINMUX_INPUT_ENABLE | PINMUX_TRISTATE;
// gpio_direction_input(GPIO_PORT_H, GPIO_PIN_0);
// }
// Configure Panel Reset pin.
PINMUX_AUX(PINMUX_AUX_LCD_RST) = PINMUX_PULL_DOWN;
gpio_direction_output(GPIO_PORT_V, GPIO_PIN_2, GPIO_LOW);
// Power up supply regulator for display interface.
MIPI_CAL(MIPI_CAL_MIPI_BIAS_PAD_CFG2) = 0;
MIPI_CAL(MIPI_CAL_MIPI_BIAS_PAD_CFG0) = 0;
if (!tegra_t210)
APB_MISC(APB_MISC_GP_DSI_PAD_CONTROL) = 0;
// Set DISP1 clock source, parent clock and DSI/PCLK to command mode.
// T210: DIVM: 1, DIVN: 20, DIVP: 3. PLLD_OUT: 100.0 MHz, PLLD_OUT0 (DSI-BCLK): 50.0 MHz. (PCLK: 16.66 MHz)
// T210B01: DIVM: 1, DIVN: 20, DIVP: 3. PLLD_OUT: 97.8 MHz, PLLD_OUT0 (DSI-BCLK): 48.9 MHz. (PCLK: 16.30 MHz)
clock_enable_plld(3, 20, true, tegra_t210);
// Setup Display Interface initial configuration.
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_dc_init_config, ARRAY_SIZE(_di_dc_init_config));
// Setup DSI init sequence packets.
reg_write_array((vu32 *)DSI_BASE, _di_dsi_seq_pkt_reset_config0, ARRAY_SIZE(_di_dsi_seq_pkt_reset_config0));
DSI(tegra_t210 ? DSI_INIT_SEQ_DATA_15 : DSI_INIT_SEQ_DATA_15_B01) = 0;
reg_write_array((vu32 *)DSI_BASE, _di_dsi_seq_pkt_reset_config1, ARRAY_SIZE(_di_dsi_seq_pkt_reset_config1));
// Reset pad trimmers for T210B01.
if (!tegra_t210)
reg_write_array((vu32 *)DSI_BASE, _di_dsi_init_pads_t210b01, ARRAY_SIZE(_di_dsi_init_pads_t210b01));
// Setup init seq packet lengths, timings and power on DSI.
reg_write_array((vu32 *)DSI_BASE, _di_dsi_init_config, ARRAY_SIZE(_di_dsi_init_config));
usleep(10);
// DSI soft reset.
_display_dsi_soft_reset();
// Set DSI LP timings.
reg_write_array((vu32 *)DSI_BASE, _di_dsi_timing_lp_config, ARRAY_SIZE(_di_dsi_timing_lp_config));
usleep(10000);
// Enable Panel Reset.
gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_HIGH);
usleep(60000);
// Setup DSI device takeover timeout.
DSI(DSI_BTA_TIMING) = _nx_aula ? 0x40103 : 0x50204;
// Get Display ID.
_panel_id_raw = 0xCCCCCC;
for (u32 i = 0; i < 3; i++)
{
if (!display_dsi_read(MIPI_DCS_GET_DISPLAY_ID, 3, &_panel_id_raw))
break;
usleep(5000);
}
// Decode Display ID.
_panel_id = ((_panel_id_raw >> 8) & 0xFF00) | (_panel_id_raw & 0xFF);
if ((_panel_id & 0xFF) == PANEL_JDI_XXX062M)
_panel_id = PANEL_JDI_XXX062M;
// For Aula ensure that we have a compatible panel id.
if (_nx_aula)
_panel_id = PANEL_SAM_AMS699VC01;
// Initialize display panel.
switch (_panel_id)
{
case PANEL_SAM_AMS699VC01:
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 180000);
// Set color mode to basic (natural). Stock is Saturated (0x00). (POR/Exit value is 0x20/0x00).
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE_PARAM,
MIPI_DCS_PRIV_SM_SET_COLOR_MODE | (DCS_SM_COLOR_MODE_BASIC << 8), 0);
// Enable backlight and smooth PWM.
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE_PARAM,
MIPI_DCS_SET_CONTROL_DISPLAY | ((DCS_CONTROL_DISPLAY_BRIGHTNESS_CTRL | DCS_CONTROL_DISPLAY_DIMMING_CTRL) << 8), 0);
// Unlock Level 2 registers.
DSI(DSI_WR_DATA) = 0x539; // MIPI_DSI_DCS_LONG_WRITE: 5 bytes.
DSI(DSI_WR_DATA) = 0x5A5A5AE2; // MIPI_DCS_PRIV_SM_SET_REGS_LOCK: Unlock Level 2 registers.
DSI(DSI_WR_DATA) = 0x5A;
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
// Set registers offset and set PWM transition to 6 frames (100ms).
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE_PARAM, MIPI_DCS_PRIV_SM_SET_REG_OFFSET | (7 << 8), 0);
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE_PARAM, MIPI_DCS_PRIV_SM_SET_ELVSS | (6 << 8), 0);
// Relock Level 2 registers.
DSI(DSI_WR_DATA) = 0x539; // MIPI_DSI_DCS_LONG_WRITE: 5 bytes.
DSI(DSI_WR_DATA) = 0xA55A5AE2; // MIPI_DCS_PRIV_SM_SET_REGS_LOCK: Lock Level 2 registers.
DSI(DSI_WR_DATA) = 0xA5;
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
// Set backlight to 0%.
DSI(DSI_WR_DATA) = 0x339; // MIPI_DSI_DCS_LONG_WRITE: 3 bytes.
DSI(DSI_WR_DATA) = 0x000051; // MIPI_DCS_SET_BRIGHTNESS 0000: 0%. FF07: 100%.
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
usleep(5000);
break;
case PANEL_JDI_XXX062M:
reg_write_array((vu32 *)DSI_BASE, _di_dsi_panel_init_config_jdi, ARRAY_SIZE(_di_dsi_panel_init_config_jdi));
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 180000);
break;
case PANEL_INL_P062CCA_AZ1:
case PANEL_AUO_A062TAN01:
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 180000);
// Unlock extension cmds.
DSI(DSI_WR_DATA) = 0x439; // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
DSI(DSI_WR_DATA) = 0x9483FFB9; // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
usleep(5000);
// Set Power control.
DSI(DSI_WR_DATA) = 0x739; // MIPI_DSI_DCS_LONG_WRITE: 7 bytes.
if (_panel_id == PANEL_INL_P062CCA_AZ1)
DSI(DSI_WR_DATA) = 0x751548B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT5 / XDK, VRH gamma volt adj 53 / x40).
else // PANEL_AUO_A062TAN01.
DSI(DSI_WR_DATA) = 0x711148B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
DSI(DSI_WR_DATA) = 0x143209; // (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32).
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
usleep(5000);
break;
case PANEL_INL_2J055IA_27A:
case PANEL_AUO_A055TAN01:
case PANEL_SHP_LQ055T1SW10:
default: // Allow spare part displays to work.
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_EXIT_SLEEP_MODE, 120000);
break;
}
// Unblank display.
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_SET_DISPLAY_ON, 20000);
// Switch to DSI HS mode.
// DIVM: 1, DIVN: 24, DIVP: 1. PLLD_OUT: 468.0 MHz, PLLD_OUT0 (DSI-BCLK): 234.0 MHz. (PCLK: 78 MHz)
clock_enable_plld(1, 24, false, tegra_t210);
// Set HS PHY timing and finalize DSI packet sequence configuration.
reg_write_array((vu32 *)DSI_BASE, _di_dsi_seq_pkt_video_non_burst_no_eot_config, ARRAY_SIZE(_di_dsi_seq_pkt_video_non_burst_no_eot_config));
// Set 1-by-1 pixel/clock and pixel clock to 234 / 3 = 78 MHz. For 60 Hz refresh rate.
DISPLAY_A(DC_DISP_DISP_CLOCK_CONTROL) = PIXEL_CLK_DIVIDER_PCD1 | SHIFT_CLK_DIVIDER(4); // div3. Default: div4.
// Set DSI mode to HOST.
reg_write_array((vu32 *)DSI_BASE, _di_dsi_host_mode_config, ARRAY_SIZE(_di_dsi_host_mode_config));
usleep(10000);
/*
* Calibrate display communication pads.
* When switching to the 16ff pad brick, the clock lane termination control
* is separated from data lane termination. This change of the mipi cal
* brings in a bug that the DSI pad clock termination code can't be loaded
* in one time calibration on T210B01. Trigger calibration twice.
*/
reg_write_array((vu32 *)MIPI_CAL_BASE, _di_mipi_pad_cal_config, ARRAY_SIZE(_di_mipi_pad_cal_config));
for (u32 i = 0; i < 2; i++)
{
// Set MIPI bias pad config.
MIPI_CAL(MIPI_CAL_MIPI_BIAS_PAD_CFG2) = 0x10010;
MIPI_CAL(MIPI_CAL_MIPI_BIAS_PAD_CFG1) = tegra_t210 ? 0x300 : 0;
// Set pad trimmers and set MIPI DSI cal offsets.
if (tegra_t210)
{
reg_write_array((vu32 *)DSI_BASE, _di_dsi_pad_cal_config_t210, ARRAY_SIZE(_di_dsi_pad_cal_config_t210));
reg_write_array((vu32 *)MIPI_CAL_BASE, _di_mipi_dsi_cal_prod_config_t210, ARRAY_SIZE(_di_mipi_dsi_cal_prod_config_t210));
}
else
{
reg_write_array((vu32 *)DSI_BASE, _di_dsi_pad_cal_config_t210b01, ARRAY_SIZE(_di_dsi_pad_cal_config_t210b01));
reg_write_array((vu32 *)MIPI_CAL_BASE, _di_mipi_dsi_cal_prod_config_t210b01, ARRAY_SIZE(_di_mipi_dsi_cal_prod_config_t210b01));
}
// Reset all unused MIPI cal offsets.
reg_write_array((vu32 *)MIPI_CAL_BASE, _di_mipi_dsi_cal_unused_config, ARRAY_SIZE(_di_mipi_dsi_cal_unused_config));
// Set Prescale/filter and start calibration.
MIPI_CAL(MIPI_CAL_MIPI_CAL_CTRL) = 0x2A000001;
}
usleep(10000);
// Setup video mode.
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_dc_video_mode_config, ARRAY_SIZE(_di_dc_video_mode_config));
}
void display_backlight_pwm_init()
{
if (_panel_id == PANEL_SAM_AMS699VC01)
return;
// Enable PWM clock.
clock_enable_pwm();
// Enable PWM and set it to 25KHz PFM. 29.5KHz is stock.
PWM(PWM_CONTROLLER_PWM_CSR_0) = PWM_CSR_EN;
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = (PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) & ~PINMUX_FUNC_MASK) | 1; // Set PWM0 mode.
usleep(2);
gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); // Backlight power mode.
}
void display_backlight(bool enable)
{
if (_panel_id == PANEL_SAM_AMS699VC01)
return;
// Backlight PWM GPIO.
gpio_write(GPIO_PORT_V, GPIO_PIN_0, enable ? GPIO_HIGH : GPIO_LOW);
}
static void _display_dsi_backlight_brightness(u32 duty)
{
if (DISPLAY_A(DC_DCS_BACKLIGHT_LEVEL) == duty)
return;
// Convert duty to candela.
u32 candela = duty * PANEL_SM_BL_CANDELA_MAX / 255;
u16 bl_ctrl = byte_swap_16((u16)candela);
display_dsi_vblank_write(MIPI_DCS_SET_BRIGHTNESS, 2, &bl_ctrl);
// Wait for backlight to completely turn off. 6 frames.
if (!duty)
usleep(100000);
DISPLAY_A(DC_DCS_BACKLIGHT_LEVEL) = duty;
}
static void _display_pwm_backlight_brightness(u32 duty, u32 step_delay)
{
u32 old_value = (PWM(PWM_CONTROLLER_PWM_CSR_0) >> 16) & 0xFF;
if (duty == old_value)
return;
if (old_value < duty)
{
for (u32 i = old_value; i <= duty; i++)
{
PWM(PWM_CONTROLLER_PWM_CSR_0) = PWM_CSR_EN | (i << 16);
usleep(step_delay);
}
}
else
{
for (int i = old_value; i >= (int)duty; i--)
{
PWM(PWM_CONTROLLER_PWM_CSR_0) = PWM_CSR_EN | (i << 16);
usleep(step_delay);
}
}
}
void display_backlight_brightness(u32 brightness, u32 step_delay)
{
if (brightness > 255)
brightness = 255;
if (_panel_id != PANEL_SAM_AMS699VC01)
_display_pwm_backlight_brightness(brightness, step_delay);
else
_display_dsi_backlight_brightness(brightness);
}
static void _display_panel_and_hw_end(bool no_panel_deinit)
{
if (no_panel_deinit)
goto skip_panel_deinit;
display_backlight_brightness(0, 1000);
// Enable host cmd packets during video.
DSI(DSI_VIDEO_MODE_CONTROL) = DSI_CMD_PKT_VID_ENABLE;
// Blank display.
DSI(DSI_WR_DATA) = (MIPI_DCS_SET_DISPLAY_OFF << 8) | MIPI_DSI_DCS_SHORT_WRITE;
// Wait for 5 frames (HOST1X_CH0_SYNC_SYNCPT_9).
// Not here. Wait for 1 frame + transmission manually.
usleep((_panel_id == PANEL_SAM_AMS699VC01) ? (15933 + 195) : (16666 + 230));
// Propagate changes to all register buffers and disable host cmd packets during video.
DISPLAY_A(DC_CMD_STATE_ACCESS) = READ_MUX_ACTIVE | WRITE_MUX_ACTIVE;
DSI(DSI_VIDEO_MODE_CONTROL) = 0;
// De-initialize video controller.
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_dc_video_disable_config, ARRAY_SIZE(_di_dc_video_disable_config));
// Set DISP1 clock source, parent clock and DSI/PCLK to command mode.
// T210: DIVM: 1, DIVN: 20, DIVP: 3. PLLD_OUT: 100.0 MHz, PLLD_OUT0 (DSI-BCLK): 50.0 MHz. (PCLK: 16.66 MHz)
// T210B01: DIVM: 1, DIVN: 20, DIVP: 3. PLLD_OUT: 97.8 MHz, PLLD_OUT0 (DSI-BCLK): 48.9 MHz. (PCLK: 16.30 MHz)
clock_enable_plld(3, 20, true, hw_get_chip_id() == GP_HIDREV_MAJOR_T210);
// DSI soft reset.
_display_dsi_soft_reset();
// Set DSI LP timings.
reg_write_array((vu32 *)DSI_BASE, _di_dsi_timing_lp_config, ARRAY_SIZE(_di_dsi_timing_lp_config));
if (_panel_id != PANEL_SAM_AMS699VC01)
usleep(10000);
// De-initialize display panel.
switch (_panel_id)
{
case PANEL_JDI_XXX062M:
reg_write_array((vu32 *)DSI_BASE, _di_dsi_panel_deinit_config_jdi, ARRAY_SIZE(_di_dsi_panel_deinit_config_jdi));
break;
case PANEL_AUO_A062TAN01:
reg_write_array((vu32 *)DSI_BASE, _di_dsi_panel_deinit_config_auo, ARRAY_SIZE(_di_dsi_panel_deinit_config_auo));
usleep(5000);
break;
case PANEL_INL_2J055IA_27A:
case PANEL_AUO_A055TAN01:
case PANEL_SHP_LQ055T1SW10:
// Unlock extension cmds.
DSI(DSI_WR_DATA) = 0x439; // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
DSI(DSI_WR_DATA) = 0x9483FFB9; // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
usleep(5000);
// Set Power control.
DSI(DSI_WR_DATA) = 0xB39; // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
if (_panel_id == PANEL_INL_2J055IA_27A)
DSI(DSI_WR_DATA) = 0x751548B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT5 / XDK, VRH gamma volt adj 53 / x40).
else if (_panel_id == PANEL_AUO_A055TAN01)
DSI(DSI_WR_DATA) = 0x711148B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
else // PANEL_SHP_LQ055T1SW10.
DSI(DSI_WR_DATA) = 0x731348B1; // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT3 / XDK, VRH gamma volt adj 51 / x40).
if (_panel_id == PANEL_INL_2J055IA_27A || _panel_id == PANEL_AUO_A055TAN01)
{
// (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32, Enter standby / PON / VCOMG).
DSI(DSI_WR_DATA) = 0x71143209;
DSI(DSI_WR_DATA) = 0x114D31; // (Unknown).
}
else // PANEL_SHP_LQ055T1SW10.
{
// (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/48, Enter standby / PON / VCOMG).
DSI(DSI_WR_DATA) = 0x71243209;
DSI(DSI_WR_DATA) = 0x004C31; // (Unknown).
}
DSI(DSI_TRIGGER) = DSI_TRIGGER_HOST;
usleep(5000);
break;
case PANEL_INL_P062CCA_AZ1:
case PANEL_SAM_AMS699VC01:
default:
break;
}
// Blank - powerdown.
_display_dsi_send_cmd(MIPI_DSI_DCS_SHORT_WRITE, MIPI_DCS_ENTER_SLEEP_MODE,
(_panel_id == PANEL_SAM_AMS699VC01) ? 120000 : 50000);
skip_panel_deinit:
// Disable Panel Reset.
gpio_write(GPIO_PORT_V, GPIO_PIN_2, GPIO_LOW);
usleep(10000);
if (!_nx_aula) // HOS uses panel id.
{
// Disable LCD driver AVDD channels.
gpio_write(GPIO_PORT_I, GPIO_PIN_0 | GPIO_PIN_1, GPIO_LOW);
// Make sure LCD driver PWM pin is in PWM0 mode.
gpio_config(GPIO_PORT_V, GPIO_PIN_0, GPIO_MODE_SPIO); // Backlight PWM.
PINMUX_AUX(PINMUX_AUX_LCD_BL_PWM) = PINMUX_TRISTATE | PINMUX_PULL_DOWN | 1; // Set PWM0 mode.
}
usleep(10000);
// Disable Display Interface specific clocks.
CLOCK(CLK_RST_CONTROLLER_RST_DEV_H_SET) = BIT(CLK_H_MIPI_CAL) | BIT(CLK_H_DSI);
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_H_CLR) = BIT(CLK_H_MIPI_CAL) | BIT(CLK_H_DSI);
CLOCK(CLK_RST_CONTROLLER_RST_DEV_L_SET) = BIT(CLK_L_DISP1);
CLOCK(CLK_RST_CONTROLLER_CLK_ENB_L_CLR) = BIT(CLK_L_DISP1);
// Power down.
DSI(DSI_PAD_CONTROL_0) = DSI_PAD_CONTROL_VS1_PULLDN_CLK | DSI_PAD_CONTROL_VS1_PULLDN(0xF) |
DSI_PAD_CONTROL_VS1_PDIO_CLK | DSI_PAD_CONTROL_VS1_PDIO(0xF);
_display_dsi_soft_reset();
// Disable DSI AVDD.
max7762x_regulator_enable(REGULATOR_LDO0, false);
}
void display_end() { _display_panel_and_hw_end(false); };
u32 display_get_verbose_panel_id()
{
return _panel_id_raw;
}
u16 display_get_decoded_panel_id()
{
return _panel_id;
}
void display_set_decoded_panel_id(u32 id)
{
// Get Hardware type, as it's used in various DI functions.
_nx_aula = fuse_read_hw_type() == FUSE_NX_HW_TYPE_AULA;
// Decode Display ID.
_panel_id = ((id >> 8) & 0xFF00) | (id & 0xFF);
if ((_panel_id & 0xFF) == PANEL_JDI_XXX062M)
_panel_id = PANEL_JDI_XXX062M;
// For Aula ensure that we have a compatible panel id.
if (_nx_aula && _panel_id == 0xCCCC)
_panel_id = PANEL_SAM_AMS699VC01;
}
void display_color_screen(u32 color)
{
// Disable all windows.
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_win_one_color, ARRAY_SIZE(_di_win_one_color));
// Configure display to show single color.
DISPLAY_A(DC_DISP_BLEND_BACKGROUND_COLOR) = color;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE | WIN_D_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ | WIN_D_ACT_REQ;
usleep(35000); // Wait 2 frames. No need on Aula.
if (_panel_id != PANEL_SAM_AMS699VC01)
display_backlight(true);
else
display_backlight_brightness(150, 0);
}
u32 *display_init_window_a_pitch()
{
// Sanitize framebuffer area.
memset((u32 *)IPL_FB_ADDRESS, 0, IPL_FB_SZ);
// This configures the framebuffer @ IPL_FB_ADDRESS with a resolution of 720x1280 (line stride 720).
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_winA_pitch, ARRAY_SIZE(_di_winA_pitch));
//usleep(35000); // Wait 2 frames. No need on Aula.
return (u32 *)DISPLAY_A(DC_WINBUF_START_ADDR);
}
u32 *display_init_window_a_pitch_vic()
{
// This configures the framebuffer @ NYX_FB_ADDRESS with a resolution of 720x1280 (line stride 720).
if (_panel_id != PANEL_SAM_AMS699VC01)
usleep(8000); // Wait half frame for PWM to apply.
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_winA_pitch_vic, ARRAY_SIZE(_di_winA_pitch_vic));
if (_panel_id != PANEL_SAM_AMS699VC01)
usleep(35000); // Wait 2 frames.
return (u32 *)DISPLAY_A(DC_WINBUF_START_ADDR);
}
u32 *display_init_window_a_pitch_inv()
{
// This configures the framebuffer @ NYX_FB_ADDRESS with a resolution of 720x1280 (line stride 720).
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_winA_pitch_inv, ARRAY_SIZE(_di_winA_pitch_inv));
usleep(35000); // Wait 2 frames. No need on Aula.
return (u32 *)DISPLAY_A(DC_WINBUF_START_ADDR);
}
u32 *display_init_window_a_block()
{
// This configures the framebuffer @ NYX_FB_ADDRESS with a resolution of 720x1280.
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_winA_block, ARRAY_SIZE(_di_winA_block));
usleep(35000); // Wait 2 frames. No need on Aula.
return (u32 *)DISPLAY_A(DC_WINBUF_START_ADDR);
}
u32 *display_init_window_d_console()
{
// This configures the framebuffer @ LOG_FB_ADDRESS with a resolution of 1280x720 (line stride 720).
reg_write_array((vu32 *)DISPLAY_A_BASE, _di_winD_log, ARRAY_SIZE(_di_winD_log));
return (u32 *)DISPLAY_A(DC_WINBUF_START_ADDR);
}
void display_window_disable(u32 window)
{
// Select window C.
DISPLAY_A(DC_CMD_DISPLAY_WINDOW_HEADER) = BIT(WINDOW_SELECT + window);
// Disable window C.
DISPLAY_A(DC_WIN_WIN_OPTIONS) = 0;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | BIT(WIN_UPDATE + window);
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | BIT(WIN_ACT_REQ + window);
}
void display_set_framebuffer(u32 window, void *fb)
{
// Select window.
DISPLAY_A(DC_CMD_DISPLAY_WINDOW_HEADER) = BIT(WINDOW_SELECT + window);
// Set new fb address.
DISPLAY_A(DC_WINBUF_START_ADDR) = (u32)fb;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | BIT(WIN_UPDATE + window);
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | BIT(WIN_ACT_REQ + window);
}
void display_move_framebuffer(u32 window, void *fb)
{
// Select window.
DISPLAY_A(DC_CMD_DISPLAY_WINDOW_HEADER) = BIT(WINDOW_SELECT + window);
// Get current framebuffer address.
const void *fb_curr = (void *)DISPLAY_A(DC_WINBUF_START_ADDR);
u32 win_size = DISPLAY_A(DC_WIN_PRESCALED_SIZE);
win_size = (win_size & 0x7FFF) * ((win_size >> 16) & 0x1FFF);
// Copy fb over.
memcpy(fb, fb_curr, win_size);
// Set new fb address.
DISPLAY_A(DC_WINBUF_START_ADDR) = (u32)fb;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | BIT(WIN_UPDATE + window);
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | BIT(WIN_ACT_REQ + window);
}
void display_window_d_console_enable()
{
// Only update active registers on vsync.
DISPLAY_A(DC_CMD_REG_ACT_CONTROL) = DISPLAY_A(DC_CMD_REG_ACT_CONTROL) & ~WIN_D_ACT_HCNTR_SEL;
// Select window D.
DISPLAY_A(DC_CMD_DISPLAY_WINDOW_HEADER) = WINDOW_D_SELECT;
// Enable and setup window D.
DISPLAY_A(DC_WIN_WIN_OPTIONS) = WIN_ENABLE;
DISPLAY_A(DC_WIN_POSITION) = 0xFF80; // X: -128.
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | WIN_D_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | WIN_D_ACT_REQ;
// Pull-down effect.
for (u32 i = 0xFF80; i < 0x10000; i++)
{
// Set window position.
DISPLAY_A(DC_WIN_POSITION) = i & 0xFFFF;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | WIN_D_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | WIN_D_ACT_REQ;
usleep(1000);
}
DISPLAY_A(DC_WIN_POSITION) = 0;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | WIN_D_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | WIN_D_ACT_REQ;
}
void display_window_d_console_disable()
{
// Select window D.
DISPLAY_A(DC_CMD_DISPLAY_WINDOW_HEADER) = WINDOW_D_SELECT;
// Pull-up effect.
for (u32 i = 0xFFFF; i > 0xFF7F; i--)
{
// Set window position.
DISPLAY_A(DC_WIN_POSITION) = i & 0xFFFF;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | WIN_D_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | WIN_D_ACT_REQ;
usleep(500);
}
// Disable window D.
DISPLAY_A(DC_WIN_POSITION) = 0;
DISPLAY_A(DC_WIN_WIN_OPTIONS) = 0;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | WIN_D_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | WIN_D_ACT_REQ;
}
void display_cursor_init(void *crs_fb, u32 size)
{
// Setup cursor.
DISPLAY_A(DC_DISP_CURSOR_START_ADDR) = CURSOR_CLIPPING(CURSOR_CLIP_WIN_A) | size | ((u32)crs_fb >> 10);
DISPLAY_A(DC_DISP_BLEND_CURSOR_CONTROL) = CURSOR_BLEND_R8G8B8A8 |
CURSOR_BLEND_DST_FACTOR(CURSOR_BLEND_K1) |
CURSOR_BLEND_SRC_FACTOR(CURSOR_BLEND_K1) | 0xFF;
// Enable cursor window.
DISPLAY_A(DC_DISP_DISP_WIN_OPTIONS) |= CURSOR_ENABLE;
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | CURSOR_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | CURSOR_ACT_REQ;
}
void display_cursor_set_pos(u32 x, u32 y)
{
// Set cursor position.
DISPLAY_A(DC_DISP_CURSOR_POSITION) = x | (y << 16);
// Arm and activate changes.
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | CURSOR_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | CURSOR_ACT_REQ;
}
void display_cursor_deinit()
{
DISPLAY_A(DC_DISP_BLEND_CURSOR_CONTROL) = 0;
DISPLAY_A(DC_DISP_DISP_WIN_OPTIONS) &= ~CURSOR_ENABLE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_UPDATE | CURSOR_UPDATE;
DISPLAY_A(DC_CMD_STATE_CONTROL) = GENERAL_ACT_REQ | CURSOR_ACT_REQ;
}
================================================
FILE: bdk/display/di.h
================================================
/*
* Copyright (c) 2018 naehrwert
* Copyright (c) 2018-2025 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _DI_H_
#define _DI_H_
#include <memory_map.h>
#include <utils/types.h>
#define DSI_VIDEO_DISABLED 0
#define DSI_VIDEO_ENABLED 1
#define WINDOW_A 0
#define WINDOW_B 1
#define WINDOW_C 2
#define WINDOW_D 3
/*! Display registers. */
// All Display/DSI/MIPI register defines and macros are index based (not offset).
// DC_CMD/DC_COM/WINC Non-shadowed. DC_DISP/DC_WIN/DC_WINBUF Shadowed.
// Display controller scratch registers.
#define DC_D_WINBUF_DD_SCRATCH_REGISTER_0 0xED
#define DC_D_WINBUF_DD_SCRATCH_REGISTER_1 0xEE
#define DC_T_WINBUF_TD_SCRATCH_REGISTER_0 0x16D
#define DC_T_WINBUF_TD_SCRATCH_REGISTER_1 0x16E
#define DC_COM_SCRATCH_REGISTER_A 0x325
#define DC_COM_SCRATCH_REGISTER_B 0x326
#define DC_A_WINBUF_AD_SCRATCH_REGISTER_0 0xBED
#define DC_A_WINBUF_AD_SCRATCH_REGISTER_1 0xBEE
#define DC_B_WINBUF_BD_SCRATCH_REGISTER_0 0xDED
#define DC_B_WINBUF_BD_SCRATCH_REGISTER_1 0xDEE
#define DC_C_WINBUF_CD_SCRATCH_REGISTER_0 0xFED
#define DC_C_WINBUF_CD_SCRATCH_REGISTER_1 0xFEE
// DC_CMD non-shadowed command/sync registers.
#define DC_CMD_GENERAL_INCR_SYNCPT 0x00
#define SYNCPT_GENERAL_INDX(x) (((x) & 0xFF) << 0)
#define SYNCPT_GENERAL_COND(x) (((x) & 0xFF) << 8)
#define COND_REG_WR_SAFE 3
#define DC_CMD_GENERAL_INCR_SYNCPT_CNTRL 0x01
#define SYNCPT_CNTRL_SOFT_RESET BIT(0)
#define SYNCPT_CNTRL_NO_STALL BIT(8)
#define DC_CMD_CONT_SYNCPT_VSYNC 0x28
#define SYNCPT_VSYNC_INDX(x) (((x) & 0xFF) << 0)
#define SYNCPT_VSYNC_ENABLE BIT(8)
#define DC_CMD_DISPLAY_COMMAND_OPTION0 0x031
#define DC_CMD_DISPLAY_COMMAND 0x32
#define DISP_CTRL_MODE_STOP (0 << 5)
#define DISP_CTRL_MODE_C_DISPLAY (1 << 5)
#define DISP_CTRL_MODE_NC_DISPLAY (2 << 5)
#define DISP_CTRL_MODE_MASK (3 << 5)
#define DC_CMD_DISPLAY_POWER_CONTROL 0x36
#define PW0_ENABLE BIT(0)
#define PW1_ENABLE BIT(2)
#define PW2_ENABLE BIT(4)
#define PW3_ENABLE BIT(6)
#define PW4_ENABLE BIT(8)
#define PM0_ENABLE BIT(16)
#define PM1_ENABLE BIT(18)
#define DC_CMD_INT_STATUS 0x37
#define DC_CMD_INT_MASK 0x38
#define DC_CMD_INT_ENABLE 0x39
#define DC_CMD_INT_FRAME_END_INT BIT(1)
#define DC_CMD_INT_V_BLANK_INT BIT(2)
#define DC_CMD_INT_POLARITY 0x3B
#define DC_CMD_STATE_ACCESS 0x40
#define READ_MUX_ASSEMBLY 0x0
#define WRITE_MUX_ASSEMBLY 0x0
#define READ_MUX_ACTIVE BIT(0)
#define WRITE_MUX_ACTIVE BIT(2)
#define DC_CMD_STATE_CONTROL 0x41
#define GENERAL_ACT_REQ BIT(0)
#define WIN_ACT_REQ 1
#define WIN_A_ACT_REQ BIT(1)
#define WIN_B_ACT_REQ BIT(2)
#define WIN_C_ACT_REQ BIT(3)
#define WIN_D_ACT_REQ BIT(4)
#define CURSOR_ACT_REQ BIT(7)
#define GENERAL_UPDATE BIT(8)
#define WIN_UPDATE 9
#define WIN_A_UPDATE BIT(9)
#define WIN_B_UPDATE BIT(10)
#define WIN_C_UPDATE BIT(11)
#define WIN_D_UPDATE BIT(12)
#define CURSOR_UPDATE BIT(15)
#define NC_HOST_TRIG BIT(24)
#define DC_CMD_DISPLAY_WINDOW_HEADER 0x42
#define WINDOW_SELECT 4
#define WINDOW_A_SELECT BIT(4)
#define WINDOW_B_SELECT BIT(5)
#define WINDOW_C_SELECT BIT(6)
#define WINDOW_D_SELECT BIT(7)
#define DC_CMD_REG_ACT_CONTROL 0x43
#define GENERAL_ACT_HCNTR_SEL BIT(0)
#define WIN_A_ACT_HCNTR_SEL BIT(2)
#define WIN_B_ACT_HCNTR_SEL BIT(4)
#define WIN_C_ACT_HCNTR_SEL BIT(6)
#define CURSOR_ACT_HCNTR_SEL BIT(7)
#define WIN_D_ACT_HCNTR_SEL BIT(10)
// DC_D_WIN_DD window D instance of DC_WIN
#define DC_D_WIN_DD_WIN_OPTIONS 0x80
#define DC_D_WIN_DD_COLOR_DEPTH 0x83
#define DC_D_WIN_DD_POSITION 0x84
#define DC_D_WIN_DD_SIZE 0x85
#define DC_D_WIN_DD_LINE_STRIDE 0x8A
#define DC_D_WIN_DD_BLEND_LAYER_CONTROL 0x96
#define DC_D_WIN_DD_BLEND_MATCH_SELECT 0x97
#define DC_D_WIN_DD_BLEND_ALPHA_1BIT 0x99
// DC_D_WINBUF_DD window D instance of DC_WINBUF
#define DC_D_WINBUF_DD_START_ADDR 0xC0
#define DC_D_WINBUF_DD_ADDR_H_OFFSET 0xC6
#define DC_D_WINBUF_DD_ADDR_V_OFFSET 0xC8
#define DC_D_WINBUF_DD_START_ADDR_HI 0xCD
#define DC_D_WINBUF_DD_MEMFETCH_CONTROL 0xEB
// DC_T_WIN_TD macro for using DD defines.
#define _DC_T(reg) ((reg) + 0x80)
// DC_COM non-shadowed registers.
#define DC_COM_CRC_CONTROL 0x300
#define DC_COM_PIN_OUTPUT_ENABLE(x) (0x302 + (x))
#define DC_COM_PIN_OUTPUT_POLARITY(x) (0x306 + (x))
#define LSC0_OUTPUT_POLARITY_LOW BIT(24)
// CMU registers.
#define DC_COM_CMU_CSC_KRR 0x32A
#define DC_COM_CMU_CSC_KGR 0x32B
#define DC_COM_CMU_CSC_KBR 0x32C
#define DC_COM_CMU_CSC_KRG 0x32D
#define DC_COM_CMU_CSC_KGG 0x32E
#define DC_COM_CMU_CSC_KBG 0x32F
#define DC_COM_CMU_CSC_KRB 0x330
#define DC_COM_CMU_CSC_KGB 0x331
#define DC_COM_CMU_CSC_KBB 0x332
#define DC_COM_CMU_LUT1 0x336
#define LUT1_ADDR(x) ((x) & 0xFF)
#define LUT1_DATA(x) (((x) & 0xFFF) << 16)
#define LUT1_READ_DATA(x) (((x) >> 16) & 0xFFF)
#define DC_COM_CMU_LUT2 0x337
#define LUT2_ADDR(x) ((x) & 0x3FF)
#define LUT2_DATA(x) (((x) & 0xFF) << 16)
#define LUT2_READ_DATA(x) (((x) >> 16) & 0xFF)
#define DC_COM_CMU_LUT1_READ 0x338
#define LUT1_READ_ADDR(x) (((x) & 0xFF) << 8)
#define LUT1_READ_EN BIT(0)
#define DC_COM_CMU_LUT2_READ 0x339
#define LUT2_READ_ADDR(x) (((x) & 0x3FF) << 8)
#define LUT2_READ_EN BIT(0)
#define DC_COM_DSC_TOP_CTL 0x33E
// DC_DISP shadowed registers.
#define DC_DISP_DISP_WIN_OPTIONS 0x402
#define CURSOR_ENABLE BIT(16)
#define SOR_ENABLE BIT(25)
#define SOR1_ENABLE BIT(26)
#define SOR1_TIMING_CYA BIT(27)
#define DSI_ENABLE BIT(29)
#define HDMI_ENABLE BIT(30)
#define DC_DISP_DISP_MEM_HIGH_PRIORITY 0x403
#define DC_DISP_DISP_MEM_HIGH_PRIORITY_TIMER 0x404
#define DC_DISP_DISP_TIMING_OPTIONS 0x405
#define VSYNC_H_POSITION(x) (((x) & 0x1FFF) << 0)
#define DC_DISP_REF_TO_SYNC 0x406
#define H_REF_TO_SYNC(x) (((x) & 0x1FFF) << 0) // Min 0 pixel clock.
#define V_REF_TO_SYNC(x) (((x) & 0x1FFF) << 16) // Min 1 line clock.
#define DC_DISP_SYNC_WIDTH 0x407
#define H_SYNC_WIDTH(x) (((x) & 0x1FFF) << 0) // Min 1 pixel clock.
#define V_SYNC_WIDTH(x) (((x) & 0x1FFF) << 16) // Min 1 line clock.
#define DC_DISP_BACK_PORCH 0x408
#define H_BACK_PORCH(x) (((x) & 0x1FFF) << 0)
#define V_BACK_PORCH(x) (((x) & 0x1FFF) << 16)
#define DC_DISP_ACTIVE 0x409
#define H_DISP_ACTIVE(x) (((x) & 0x1FFF) << 0) // Min 16 pixel clock.
#define V_DISP_ACTIVE(x) (((x) & 0x1FFF) << 16) // Min 16 line clock.
#define DC_DISP_FRONT_PORCH 0x40A
#define H_FRONT_PORCH(x) (((x) & 0x1FFF) << 0) // Min -=PS_=-H_REF_TO_SYNC + 1
#define V_FRONT_PORCH(x) (((x) & 0x1FFF) << 16) // Min -=PS_=-V_REF_TO_SYNC + 1
#define DC_DISP_DISP_CLOCK_CONTROL 0x42E
#define SHIFT_CLK_DIVIDER(x) ((x) & 0xFF)
#define PIXEL_CLK_DIVIDER_PCD1 (0 << 8)
#define PIXEL_CLK_DIVIDER_PCD1H (1 << 8)
#define PIXEL_CLK_DIVIDER_PCD2 (2 << 8)
#define PIXEL_CLK_DIVIDER_PCD3 (3 << 8)
#define PIXEL_CLK_DIVIDER_PCD4 (4 << 8)
#define PIXEL_CLK_DIVIDER_PCD6 (5 << 8)
#define PIXEL_CLK_DIVIDER_PCD8 (6 << 8)
#define PIXEL_CLK_DIVIDER_PCD9 (7 << 8)
#define PIXEL_CLK_DIVIDER_PCD12 (8 << 8)
#define PIXEL_CLK_DIVIDER_PCD16 (9 << 8)
#define PIXEL_CLK_DIVIDER_PCD18 (10 << 8)
#define PIXEL_CLK_DIVIDER_PCD24 (11 << 8)
#define PIXEL_CLK_DIVIDER_PCD13 (12 << 8)
#define DC_DISP_DISP_INTERFACE_CONTROL 0x42F
#define DISP_DATA_FORMAT_DF1P1C (0 << 0)
#define DISP_DATA_FORMAT_DF1P2C24B (1 << 0)
#define DISP_DATA_FORMAT_DF1P2C18B (2 << 0)
#define DISP_DATA_FORMAT_DF1P2C16B (3 << 0)
#define DISP_DATA_FORMAT_DF2S (4 << 0)
#define DISP_DATA_FORMAT_DF3S (5 << 0)
#define DISP_DATA_FORMAT_DFSPI (6 << 0)
#define DISP_DATA_FORMAT_DF1P3C24B (7 << 0)
#define DISP_DATA_FORMAT_DF1P3C18B (8 << 0)
#define DISP_ALIGNMENT_MSB (0 << 8)
#define DISP_ALIGNMENT_LSB (1 << 8)
#define DISP_ORDER_RED_BLUE (0 << 9)
#define DISP_ORDER_BLUE_RED (1 << 9)
#define DC_DISP_DISP_COLOR_CONTROL 0x430
#define BASE_COLOR_SIZE_MASK (0xF << 0)
#define BASE_COLOR_SIZE_666 (0 << 0)
#define BASE_COLOR_SIZE_111 (1 << 0)
#define BASE_COLOR_SIZE_222 (2 << 0)
#define BASE_COLOR_SIZE_333 (3 << 0)
#define BASE_COLOR_SIZE_444 (4 << 0)
#define BASE_COLOR_SIZE_555 (5 << 0)
#define BASE_COLOR_SIZE_565 (6 << 0)
#define BASE_COLOR_SIZE_332 (7 << 0)
#define BASE_COLOR_SIZE_888 (8 << 0)
#define DITHER_CONTROL_MASK (3 << 8)
#define DITHER_CONTROL_DISABLE (0 << 8)
#define DITHER_CONTROL_ORDERED (2 << 8)
#define DITHER_CONTROL_ERRDIFF (3 << 8)
#define DISP_COLOR_SWAP BIT(16)
#define BLANK_COLOR_WHITE BIT(17)
#define CMU_ENABLE BIT(20)
#define DC_DISP_SHIFT_CLOCK_OPTIONS 0x431
#define SC0_H_QUALIFIER_NONE BIT(0)
#define SC1_H_QUALIFIER_NONE BIT(16)
#define DC_DISP_DATA_ENABLE_OPTIONS 0x432
#define DE_SELECT_ACTIVE_BLANK (0 << 0)
#define DE_SELECT_ACTIVE (1 << 0)
#define DE_SELECT_ACTIVE_IS (2 << 0)
#define DE_CONTROL_ONECLK (0 << 2)
#define DE_CONTROL_NORMAL (1 << 2)
#define DE_CONTROL_EARLY_EXT (2 << 2)
#define DE_CONTROL_EARLY (3 << 2)
#define DE_CONTROL_ACTIVE_BLANK (4 << 2)
// Cursor configuration registers.
#define DC_DISP_CURSOR_FOREGROUND 0x43C
#define DC_DISP_CURSOR_BACKGROUND 0x43D
#define CURSOR_COLOR(r,g,b) (((r) & 0xFF) | (((g) & 0xFF) << 8) | (((b) & 0xFF) << 16))
#define DC_DISP_CURSOR_START_ADDR 0x43E
#define DC_DISP_CURSOR_START_ADDR_NS 0x43F
#define CURSOR_CLIPPING(w) ((w) << 28)
#define CURSOR_CLIP_WIN_A 1
#define CURSOR_CLIP_WIN_B 2
#define CURSOR_CLIP_WIN_C 3
#define CURSOR_SIZE_32 (0 << 24)
#define CURSOR_SIZE_64 (1 << 24)
#define CURSOR_SIZE_128 (2 << 24)
#define CURSOR_SIZE_256 (3 << 24)
#define DC_DISP_CURSOR_POSITION 0x440
#define DC_DISP_CURSOR_START_ADDR_HI 0x4EC
#define DC_DISP_CURSOR_START_ADDR_HI_NS 0x4ED
#define DC_DISP_BLEND_CURSOR_CONTROL 0x4F1
#define CURSOR_BLEND_2BIT (0 << 24)
#define CURSOR_BLEND_R8G8B8A8 (1 << 24)
#define CURSOR_BLEND_SRC_FACTOR(n) ((n) << 8)
#define CURSOR_BLEND_DST_FACTOR(n) ((n) << 16)
#define CURSOR_BLEND_ZRO 0
#define CURSOR_BLEND_K1 1
#define CURSOR_BLEND_NK1 2
// End of cursor cfg regs.
#define DC_DISP_DC_MCCIF_FIFOCTRL 0x480
#define DC_DISP_SD_BL_PARAMETERS 0x4D7
#define DC_DISP_SD_BL_CONTROL 0x4DC
#define DC_DISP_BLEND_BACKGROUND_COLOR 0x4E4
#define DC_DISP_DISPLAY_SPARE0 0x4F7 // Used by SW/HW.
#define DC_DISP_DISPLAY_SPARE1 0x4F8
#define DC_WINC_COLOR_PALETTE 0x500
#define COLOR_PALETTE_IDX(off) (DC_WINC_COLOR_PALETTE + (off))
#define COLOR_PALETTE_RGB(rgb) (byte_swap_32(rgb) >> 8)
#define DC_WINC_PALETTE_COLOR_EXT 0x600
#define DC_WINC_H_FILTER_P(p) (0x601 + (p))
#define DC_WINC_V_FILTER_P(p) (0x619 + (p))
#define DC_WINC_H_FILTER_HI_P(p) (0x629 + (p))
#define DC_WINC_CSC_YOF 0x611
#define DC_WINC_CSC_KYRGB 0x612
#define DC_WINC_CSC_KUR 0x613
#define DC_WINC_CSC_KVR 0x614
#define DC_WINC_CSC_KUG 0x615
#define DC_WINC_CSC_KVG 0x616
#define DC_WINC_CSC_KUB 0x617
#define DC_WINC_CSC_KVB 0x618
#define DC_WIN_AD_WIN_OPTIONS 0xB80
#define DC_WIN_BD_WIN_OPTIONS 0xD80
#define DC_WIN_CD_WIN_OPTIONS 0xF80
// The following registers are A/B/C shadows of the 0xB80/0xD80/0xF80 registers (see DISPLAY_WINDOW_HEADER).
#define DC_WIN_WIN_OPTIONS 0x700
#define H_DIRECTION BIT(0)
#define V_DIRECTION BIT(2)
#define SCAN_COLUMN BIT(4)
#define COLOR_EXPAND BIT(6)
#define H_FILTER_ENABLE BIT(8)
#define V_FILTER_ENABLE BIT(10)
#define COLOR_PALETTE_ENABLE BIT(16)
#define CSC_ENABLE BIT(18)
#define DV_ENABLE BIT(20)
#define WIN_ENABLE BIT(30)
#define H_FILTER_EXPAND BIT(31)
#define DC_WIN_BUFFER_CONTROL 0x702
#define BUFFER_CONTROL_HOST 0
#define BUFFER_CONTROL_VI 1
#define BUFFER_CONTROL_SB2D 4
#define DC_WIN_COLOR_DEPTH 0x703
#define WIN_COLOR_DEPTH_P1 0x0
#define WIN_COLOR_DEPTH_P2 0x1
#define WIN_COLOR_DEPTH_P4 0x2
#define WIN_COLOR_DEPTH_P8 0x3
#define WIN_COLOR_DEPTH_B4G4R4A4 0x4
#define WIN_COLOR_DEPTH_B5G5R5A 0x5
#define WIN_COLOR_DEPTH_B5G6R5 0x6
#define WIN_COLOR_DEPTH_AB5G5R5 0x7
#define WIN_COLOR_DEPTH_B8G8R8A8 0xC
#define WIN_COLOR_DEPTH_R8G8B8A8 0xD
#define WIN_COLOR_DEPTH_B6x2G6x2R6x2A8 0xE
#define WIN_COLOR_DEPTH_R6x2G6x2B6x2A8 0xF
#define WIN_COLOR_DEPTH_YCbCr422 0x10
#define WIN_COLOR_DEPTH_YUV422 0x11
#define WIN_COLOR_DEPTH_YCbCr420P 0x12
#define WIN_COLOR_DEPTH_YUV420P 0x13
#define WIN_COLOR_DEPTH_YCbCr422P 0x14
#define WIN_COLOR_DEPTH_YUV422P 0x15
#define WIN_COLOR_DEPTH_YCbCr422R 0x16
#define WIN_COLOR_DEPTH_YUV422R 0x17
#define WIN_COLOR_DEPTH_YCbCr422RA 0x18
#define WIN_COLOR_DEPTH_YUV422RA 0x19
#define WIN_COLOR_DEPTH_X1R5G5B5 0x1E
#define WIN_COLOR_DEPTH_R5G5B5X1 0x1F
#define WIN_COLOR_DEPTH_X1B5G5R5 0x20
#define WIN_COLOR_DEPTH_B5G5R5X1 0x21
#define WIN_COLOR_DEPTH_YCbCr444P 0x29
#define WIN_COLOR_DEPTH_YCrCb420SP 0x2A
#define WIN_COLOR_DEPTH_YCbCr420SP 0x2B
#define WIN_COLOR_DEPTH_YCrCb422SP 0x2C
#define WIN_COLOR_DEPTH_YCbCr422SP 0x2D
#define WIN_COLOR_DEPTH_YUV444P 0x34
#define WIN_COLOR_DEPTH_YVU420SP 0x35
#define WIN_COLOR_DEPTH_YUV420SP 0x36
#define WIN_COLOR_DEPTH_YVU422SP 0x37
#define WIN_COLOR_DEPTH_YUV422SP 0x38
#define WIN_COLOR_DEPTH_YVU444SP 0x3B
#define WIN_COLOR_DEPTH_YUV444SP 0x3C
#define DC_WIN_POSITION 0x704
#define H_POSITION(x) (((x) & 0xFFFF) << 0) // Support negative.
#define V_POSITION(x) (((x) & 0xFFFF) << 16) // Support negative.
#define DC_WIN_SIZE 0x705
#define H_SIZE(x) (((x) & 0x1FFF) << 0)
#define V_SIZE(x) (((x) & 0x1FFF) << 16)
#define DC_WIN_PRESCALED_SIZE 0x706
#define H_PRESCALED_SIZE(x) (((x) & 0x7FFF) << 0)
#define V_PRESCALED_SIZE(x) (((x) & 0x1FFF) << 16)
#define DC_WIN_H_INITIAL_DDA 0x707
#define DC_WIN_V_INITIAL_DDA 0x708
#define DC_WIN_DDA_INC 0x709
#define H_DDA_INC(x) (((x) & 0xFFFF) << 0)
#define V_DDA_INC(x) (((x) & 0xFFFF) << 16)
#define DC_WIN_LINE_STRIDE 0x70A
#define LINE_STRIDE(x) (x)
#define UV_LINE_STRIDE(x) (((x) & 0xFFFF) << 16)
#define DC_WIN_DV_CONTROL 0x70E
#define DV_CTRL_R(r) (((r) & 7) << 16)
#define DV_CTRL_G(g) (((g) & 7) << 8)
#define DV_CTRL_B(b) (((b) & 7) << 0)
#define DC_WINBUF_BLEND_LAYER_CONTROL 0x716
#define WIN_BLEND_DEPTH(x) (((x) & 0xFF) << 0)
#define WIN_K1(x) (((x) & 0xFF) << 8)
#define WIN_K2(x) (((x) & 0xFF) << 16)
#define WIN_BLEND_ENABLE (0 << 24)
#define WIN_BLEND_BYPASS (1 << 24)
#define DC_WINBUF_BLEND_MATCH_SELECT 0x717
#define WIN_BLEND_FACT_SRC_COLOR_MATCH_SEL_ZERO (0 << 0)
#define WIN_BLEND_FACT_SRC_COLOR_MATCH_SEL_ONE (1 << 0)
#define WIN_BLEND_FACT_SRC_COLOR_MATCH_SEL_K1 (2 << 0)
#define WIN_BLEND_FACT_SRC_COLOR_MATCH_SEL_K1_TIMES_DST (3 << 0)
#define WIN_BLEND_FACT_SRC_COLOR_MATCH_SEL_NEG_K1_TIMES_DST (4 << 0)
#define WIN_BLEND_FACT_SRC_COLOR_MATCH_SEL_K1_TIMES_SRC (5 << 0)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_ZERO (0 << 4)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_ONE (1 << 4)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_K1 (2 << 4)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_K2 (3 << 4)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_K1_TIMES_DST (4 << 4)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_NEG_K1_TIMES_DST (5 << 4)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_NEG_K1_TIMES_SRC (6 << 4)
#define WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_NEG_K1 (7 << 4)
#define WIN_BLEND_FACT_SRC_ALPHA_MATCH_SEL_ZERO (0 << 8)
#define WIN_BLEND_FACT_SRC_ALPHA_MATCH_SEL_K1 (1 << 8)
#define WIN_BLEND_FACT_SRC_ALPHA_MATCH_SEL_K2 (2 << 8)
#define WIN_BLEND_FACT_DST_ALPHA_MATCH_SEL_ZERO (0 << 12)
#define WIN_BLEND_FACT_DST_ALPHA_MATCH_SEL_ONE (1 << 12)
#define WIN_BLEND_FACT_DST_ALPHA_MATCH_SEL_NEG_K1_TIMES_SRC (2 << 12)
#define WIN_BLEND_FACT_DST_ALPHA_MATCH_SEL_K2 (3 << 12)
#define DC_WINBUF_BLEND_ALPHA_1BIT 0x719
#define WIN_ALPHA_1BIT_WEIGHT0(x) (((x) & 0xFF) << 0)
#define WIN_ALPHA_1BIT_WEIGHT1(x) (((x) & 0xFF) << 8)
/*! The following registers are A/B/C shadows of the 0xBC0/0xDC0/0xFC0 registers (see DISPLAY_WINDOW_HEADER). */
#define DC_WINBUF_START_ADDR 0x800
#define DC_WINBUF_ADDR_H_OFFSET 0x806
#define DC_WINBUF_ADDR_V_OFFSET 0x808
#define DC_WINBUF_SURFACE_KIND 0x80B
#define PITCH (0 << 0)
#define TILED (1 << 0)
#define BLOCK (2 << 0)
#define BLOCK_HEIGHT(x) (((x) & 0x7) << 4)
#define DC_WINBUF_MEMFETCH_CONTROL 0x82B
/* Scratch register to store DCS backlight level (custom). */
#define DC_DCS_BACKLIGHT_LEVEL DC_COM_SCRATCH_REGISTER_B
/*! Display serial interface registers. */
#define DSI_INCR_SYNCPT_CNTRL 0x1
#define DSI_INCR_SYNCPT_SOFT_RESET BIT(0)
#define DSI_INCR_SYNCPT_NO_STALL BIT(8)
#define DSI_RD_DATA 0x9
#define DSI_WR_DATA 0xA
#define DSI_POWER_CONTROL 0xB
#define DSI_POWER_CONTROL_ENABLE 1
#define DSI_INT_ENABLE 0xC
#define DSI_INT_STATUS 0xD
#define DSI_INT_MASK 0xE
#define DSI_HOST_CONTROL 0xF
#define DSI_HOST_CONTROL_ECC BIT(0)
#define DSI_HOST_CONTROL_CS BIT(1)
#define DSI_HOST_CONTROL_PKT_BTA BIT(2)
#define DSI_HOST_CONTROL_IMM_BTA BIT(3)
#define DSI_HOST_CONTROL_FIFO_SEL BIT(4)
#define DSI_HOST_CONTROL_HS BIT(5)
#define DSI_HOST_CONTROL_RAW BIT(6)
#define DSI_HOST_CONTROL_TX_TRIG_MASK (3 << 12)
#define DSI_HOST_CONTROL_TX_TRIG_SOL (0 << 12)
#define DSI_HOST_CONTROL_TX_TRIG_FIFO (1 << 12)
#define DSI_HOST_CONTROL_TX_TRIG_HOST (2 << 12)
#define DSI_HOST_CONTROL_CRC_RESET BIT(20)
#define DSI_HOST_CONTROL_FIFO_RESET BIT(21)
#define DSI_CONTROL 0x10
#define DSI_CONTROL_HOST_ENABLE BIT(0)
#define DSI_CONTROL_VIDEO_ENABLE BIT(1)
#define DSI_CONTROL_SOURCE(s) (((s) & 0x1) << 2)
#define DSI_CONTROL_DCS_ENABLE BIT(3)
#define DSI_CONTROL_LANES(n) (((n) & 0x3) << 4)
#define DSI_CONTROL_TX_TRIG(x) (((x) & 0x3) << 8)
#define DSI_CONTROL_FORMAT(f) (((f) & 0x3) << 12)
#define DSI_CONTROL_CHANNEL(c) (((c) & 0x3) << 16)
#define DSI_CONTROL_HS_CLK_CTRL BIT(20)
#define DSI_SOL_DELAY 0x11
#define DSI_MAX_THRESHOLD 0x12
#define DSI_TRIGGER 0x13
#define DSI_TRIGGER_VIDEO BIT(0)
#define DSI_TRIGGER_HOST BIT(1)
#define DSI_TX_CRC 0x14
#define DSI_STATUS 0x15
#define DSI_STATUS_RX_FIFO_SIZE 0x1F
#define DSI_STATUS_TX_FIFO_SIZE 0x20 // Actual depth is 64.
#define DSI_INIT_SEQ_CONTROL 0x1A
#define DSI_INIT_SEQ_DATA_0 0x1B
#define DSI_INIT_SEQ_DATA_1 0x1C
#define DSI_INIT_SEQ_DATA_2 0x1D
#define DSI_INIT_SEQ_DATA_3 0x1E
#define DSI_PKT_SEQ_0_LO 0x23
#define DSI_PKT_SEQ_0_HI 0x24
#define DSI_PKT_SEQ_1_LO 0x25
#define DSI_PKT_SEQ_1_HI 0x26
#define DSI_PKT_SEQ_2_LO 0x27
#define DSI_PKT_SEQ_2_HI 0x28
#define DSI_PKT_SEQ_3_LO 0x29
#define DSI_PKT_SEQ_3_HI 0x2A
#define DSI_PKT_SEQ_4_LO 0x2B
#define DSI_PKT_SEQ_4_HI 0x2C
#define DSI_PKT_SEQ_5_LO 0x2D
#define DSI_PKT_SEQ_5_HI 0x2E
#define DSI_DCS_CMDS 0x33
#define DSI_PKT_LEN_0_1 0x34
#define DSI_PKT_LEN_2_3 0x35
#define DSI_PKT_LEN_4_5 0x36
#define DSI_PKT_LEN_6_7 0x37
#define PKT0_LEN(x) (((x) & 0xFFFF) << 0)
#define PKT1_LEN(x) (((x) & 0xFFFF) << 16)
#define DSI_PHY_TIMING_0 0x3C
#define DSI_PHY_TIMING_1 0x3D
#define DSI_PHY_TIMING_2 0x3E
#define DSI_BTA_TIMING 0x3F
#define DSI_TIMEOUT_0 0x44
#define DSI_TIMEOUT_HTX(x) (((x) & 0xFFFF) << 0)
#define DSI_TIMEOUT_LRX(x) (((x) & 0xFFFF) << 16)
#define DSI_TIMEOUT_1 0x45
#define DSI_TIMEOUT_TA(x) (((x) & 0xFFFF) << 0)
#define DSI_TIMEOUT_PR(x) (((x) & 0xFFFF) << 16)
#define DSI_TO_TALLY 0x46
#define DSI_PAD_CONTROL_0 0x4B
#define DSI_PAD_CONTROL_VS1_PDIO_CLK BIT(8)
#define DSI_PAD_CONTROL_VS1_PDIO(x) (((x) & 0xF) << 0)
#define DSI_PAD_CONTROL_VS1_PULLDN_CLK BIT(24)
#define DSI_PAD_CONTROL_VS1_PULLDN(x) (((x) & 0xF) << 16)
#define DSI_PAD_CONTROL_CD 0x4C
#define DSI_VIDEO_MODE_CONTROL 0x4E
#define DSI_CMD_PKT_VID_ENABLE 1
#define DSI_DSI_LINE_TYPE(x) ((x) << 1)
#define DSI_PAD_CONTROL_1 0x4F
#define DSI_PAD_CONTROL_2 0x50
#define DSI_PAD_CONTROL_3 0x51
#define DSI_PAD_PREEMP_PU(x) (((x) & 0x3) << 0)
#define DSI_PAD_PREEMP_PD(x) (((x) & 0x3) << 4)
#define DSI_PAD_PREEMP_PU_CLK(x) (((x) & 0x3) << 8)
#define DSI_PAD_PREEMP_PD_CLK(x) (((x) & 0x3) << 12)
#define DSI_PAD_CONTROL_4 0x52
#define DSI_PAD_CONTROL_5_B01 0x53
#define DSI_PAD_CONTROL_6_B01 0x54
#define DSI_PAD_CONTROL_7_B01 0x55
#define DSI_INIT_SEQ_DATA_15 0x5F
#define DSI_INIT_SEQ_DATA_15_B01 0x62
/*! DSI packet defines */
#define DSI_ESCAPE_CMD 0x87
#define DSI_ACK_NO_ERR 0x84
#define ACK_ERROR_RES 0x02
#define GEN_LONG_RD_RES 0x1A
#define DCS_LONG_RD_RES 0x1C
#define GEN_1_BYTE_SHORT_RD_RES 0x11
#define DCS_1_BYTE_SHORT_RD_RES 0x21
#define GEN_2_BYTE_SHORT_RD_RES 0x12
#define DCS_2_BYTE_SHORT_RD_RES 0x22
/*! MIPI registers. */
#define MIPI_CAL_MIPI_CAL_CTRL (0x00 / 0x4)
#define MIPI_CAL_CIL_MIPI_CAL_STATUS (0x08 / 0x4)
#define MIPI_CAL_CILA_MIPI_CAL_CONFIG (0x14 / 0x4)
#define MIPI_CAL_CILB_MIPI_CAL_CONFIG (0x18 / 0x4)
#define MIPI_CAL_CILC_MIPI_CAL_CONFIG (0x1C / 0x4)
#define MIPI_CAL_CILD_MIPI_CAL_CONFIG (0x20 / 0x4)
#define MIPI_CAL_CILE_MIPI_CAL_CONFIG (0x24 / 0x4)
#define MIPI_CAL_CILF_MIPI_CAL_CONFIG (0x28 / 0x4)
#define MIPI_CAL_DSIA_MIPI_CAL_CONFIG (0x38 / 0x4)
#define MIPI_CAL_DSIB_MIPI_CAL_CONFIG (0x3C / 0x4)
#define MIPI_CAL_DSIC_MIPI_CAL_CONFIG (0x40 / 0x4)
#define MIPI_CAL_DSID_MIPI_CAL_CONFIG (0x44 / 0x4)
#define MIPI_CAL_MIPI_BIAS_PAD_CFG0 (0x58 / 0x4)
#define MIPI_CAL_MIPI_BIAS_PAD_CFG1 (0x5C / 0x4)
#define MIPI_CAL_MIPI_BIAS_PAD_CFG2 (0x60 / 0x4)
#define MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2 (0x64 / 0x4)
#define MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2 (0x68 / 0x4)
#define MIPI_CAL_DSIC_MIPI_CAL_CONFIG_2 (0x70 / 0x4)
#define MIPI_CAL_DSID_MIPI_CAL_CONFIG_2 (0x74 / 0x4)
/*! MIPI CMDs. */
#define MIPI_DSI_V_SYNC_START 0x01
#define MIPI_DSI_COLOR_MODE_OFF 0x02
#define MIPI_DSI_END_OF_TRANSMISSION 0x08
#define MIPI_DSI_NULL_PACKET 0x09
#define MIPI_DSI_V_SYNC_END 0x11
#define MIPI_DSI_COLOR_MODE_ON 0x12
#define MIPI_DSI_BLANKING_PACKET 0x19
#define MIPI_DSI_H_SYNC_START 0x21
#define MIPI_DSI_SHUTDOWN_PERIPHERAL 0x22
#define MIPI_DSI_H_SYNC_END 0x31
#define MIPI_DSI_TURN_ON_PERIPHERAL 0x32
#define MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE 0x37
#define MIPI_DSI_DCS_SHORT_WRITE 0x05
#define MIPI_DSI_DCS_READ 0x06
#define MIPI_DSI_DCS_SHORT_WRITE_PARAM 0x15
#define MIPI_DSI_DCS_LONG_WRITE 0x39
#define MIPI_DSI_GENERIC_LONG_WRITE 0x29
#define MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM 0x03
#define MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM 0x13
#define MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM 0x23
#define MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM 0x04
#define MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM 0x14
#define MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM 0x24
/*! MIPI DCS CMDs. */
#define MIPI_DCS_NOP 0x00
#define MIPI_DCS_SOFT_RESET 0x01
#define MIPI_DCS_GET_COMPRESSION_MODE 0x03
#define MIPI_DCS_GET_DISPLAY_ID 0x04
#define MIPI_DCS_GET_DISPLAY_ID1 0xDA // GET_DISPLAY_ID Byte0, Module Manufacturer ID.
#define MIPI_DCS_GET_DISPLAY_ID2 0xDB // GET_DISPLAY_ID Byte1, Module/Driver Version ID.
#define MIPI_DCS_GET_DISPLAY_ID3 0xDC // GET_DISPLAY_ID Byte2, Module/Driver ID.
#define MIPI_DCS_GET_NUM_ERRORS 0x05 // 1 byte.
#define MIPI_DCS_GET_RED_CHANNEL 0x06
#define MIPI_DCS_GET_GREEN_CHANNEL 0x07
#define MIPI_DCS_GET_BLUE_CHANNEL 0x08
#define MIPI_DCS_GET_DISPLAY_STATUS 0x09 // 4 bytes.
#define MIPI_DCS_GET_POWER_MODE 0x0A // 1 byte. 2: DISON, 3: NORON, 4: SLPOUT, 7: BSTON.
#define MIPI_DCS_GET_ADDRESS_MODE 0x0B // Display Access Control. 1 byte. 0: GS, 1: SS, 3: BGR.
#define MIPI_DCS_GET_PIXEL_FORMAT 0x0C // 1 byte. 4-6: DPI.
#define MIPI_DCS_GET_DISPLAY_MODE 0x0D // 1 byte. 0-2: GCS, 3: ALLPOFF, 4: ALLPON, 5: INVON.
#define MIPI_DCS_GET_SIGNAL_MODE 0x0E // 1 byte. 0: EODSI, 2: DEON, 3: PCLKON, 4: VSON, 5: HSON, 7: TEON.
#define MIPI_DCS_GET_DIAGNOSTIC_RESULT 0x0F // 1 byte. 6: FUNDT, 7: REGLD.
#define MIPI_DCS_ENTER_SLEEP_MODE 0x10
#define MIPI_DCS_EXIT_SLEEP_MODE 0x11
#define MIPI_DCS_ENTER_PARTIAL_MODE 0x12
#define MIPI_DCS_ENTER_NORMAL_MODE 0x13
#define MIPI_DCS_EXIT_INVERT_MODE 0x20
#define MIPI_DCS_ENTER_INVERT_MODE 0x21
#define MIPI_DCS_ALL_PIXELS_OFF 0x22
#define MIPI_DCS_ALL_PIXELS_ON 0x23
#define MIPI_DCS_SET_CONTRAST 0x25 // VCON in 40mV steps. 7-bit integer.
#define MIPI_DCS_SET_GAMMA_CURVE 0x26 // 1 byte. 0-7: GC.
#define MIPI_DCS_SET_DISPLAY_OFF 0x28
#define MIPI_DCS_SET_DISPLAY_ON 0x29
#define MIPI_DCS_SET_COLUMN_ADDRESS 0x2A
#define MIPI_DCS_SET_PAGE_ADDRESS 0x2B
#define MIPI_DCS_WRITE_MEMORY_START 0x2C
#define MIPI_DCS_WRITE_LUT 0x2D // 24-bit: 192 bytes.
#define MIPI_DCS_READ_MEMORY_START 0x2E
#define MIPI_DCS_SET_PARTIAL_ROWS 0x30
#define MIPI_DCS_SET_PARTIAL_COLUMNS 0x31
#define MIPI_DCS_SET_SCROLL_AREA 0x33
#define MIPI_DCS_SET_TEAR_OFF 0x34
#define MIPI_DCS_SET_TEAR_ON 0x35
#define MIPI_DCS_SET_ADDRESS_MODE 0x36 // Display Access Control. 1 byte. 0: GS, 1: SS, 3: BGR.
#define MIPI_DCS_SET_SCROLL_START 0x37
#define MIPI_DCS_EXIT_IDLE_MODE 0x38
#define MIPI_DCS_ENTER_IDLE_MODE 0x39
#define MIPI_DCS_SET_PIXEL_FORMAT 0x3A // 1 byte. 4-6: DPI.
#define MIPI_DCS_WRITE_MEMORY_CONTINUE 0x3C
#define MIPI_DCS_READ_MEMORY_CONTINUE 0x3E
#define MIPI_DCS_GET_3D_CONTROL 0x3F
#define MIPI_DCS_SET_VSYNC_TIMING 0x40
#define MIPI_DCS_SET_TEAR_SCANLINE 0x44
#define MIPI_DCS_GET_SCANLINE 0x45
#define MIPI_DCS_SET_TEAR_SCANLINE_WIDTH 0x46
#define MIPI_DCS_GET_SCANLINE_WIDTH 0x47
#define MIPI_DSI_AREA_COLOR_MODE 0x4C
#define MIPI_DCS_SET_BRIGHTNESS 0x51 // DCS_CONTROL_DISPLAY_BRIGHTNESS_CTRL. 1 byte. 0-7: DBV.
#define MIPI_DCS_GET_BRIGHTNESS 0x52 // 1 byte. 0-7: DBV.
#define MIPI_DCS_SET_CONTROL_DISPLAY 0x53 // 1 byte. 2: BL, 3: DD, 5: BCTRL.
#define MIPI_DCS_GET_CONTROL_DISPLAY 0x54 // 1 byte. 2: BL, 3: DD, 5: BCTRL.
#define MIPI_DCS_SET_CABC_VALUE 0x55 // 1 byte. 0-32: C, 4-7: C.
#define MIPI_DCS_GET_CABC_VALUE 0x56 // 1 byte. 0-32: C, 4-7: C.
#define MIPI_DCS_SET_CABC_MIN_BRI 0x5E // 1 byte. 0-7: CMB.
#define MIPI_DCS_GET_CABC_MIN_BRI 0x5F // 1 byte. 0-7: CMB.
#define MIPI_DCS_GET_AUTO_BRI_DIAG_RES 0x68 // 1 byte. 6-7: D.
#define MIPI_DCS_READ_DDB_START 0xA1
#define MIPI_DCS_READ_DDB_CONTINUE 0xA8 // 0x100 size.
/*! MIPI DCS Panel Private CMDs. */
#define MIPI_DCS_PRIV_SM_SET_COLOR_MODE 0xA0 // 43 bytes.
#define MIPI_DCS_PRIV_SM_SET_REG_OFFSET 0xB0
#define MIPI_DCS_PRIV_SM_SET_ELVSS 0xB1 // OLED backlight tuning. Byte7: PWM transition time in frames.
#define MIPI_DCS_PRIV_SET_POWER_CONTROL 0xB1
#define MIPI_DCS_PRIV_SET_EXTC 0xB9 // Enable extended commands.
#define MIPI_DCS_PRIV_UNK_BD 0xBD
#define MIPI_DCS_PRIV_UNK_D5 0xD5
#define MIPI_DCS_PRIV_UNK_D6 0xD6
#define MIPI_DCS_PRIV_UNK_D8 0xD8
#define MIPI_DCS_PRIV_UNK_D9 0xD9
#define MIPI_DCS_PRIV_SM_DISPLAY_ID 0xDD
// LVL1 LVL2 LVL3 UNK0 UNK1
#define MIPI_DCS_PRIV_SM_SET_REGS_LOCK 0xE2 // Samsung: Lock (default): 5A5A A5A5 A5A5 A500 A500. Lock/Unlock: A5/5A. LVL1 group is normal registers.
#define MIPI_DCS_PRIV_READ_EXTC_CMD_SPI 0xFE // Read EXTC Command In SPI. 1 byte. 0-6: EXT_SPI_CNT, 7:EXT_SP.
#define MIPI_DCS_PRIV_SET_EXTC_CMD_REG 0xFF // EXTC Command Set enable register. 5 bytes. Pass: FF 98 06 04, PAGE.
/*! MIPI DCS Panel Private CMDs PAGE 1. */
#define MIPI_DCS_PRIV_GET_DISPLAY_ID4 0x00
#define MIPI_DCS_PRIV_GET_DISPLAY_ID5 0x01
#define MIPI_DCS_PRIV_GET_DISPLAY_ID6 0x02
/*! MIPI DCS CMD Defines. */
#define DCS_POWER_MODE_DISPLAY_ON BIT(2)
#define DCS_POWER_MODE_NORMAL_MODE BIT(3)
#define DCS_POWER_MODE_SLEEP_MODE BIT(4)
#define DCS_POWER_MODE_PARTIAL_MODE BIT(5)
#define DCS_POWER_MODE_IDLE_MODE BIT(6)
#define DCS_ADDRESS_MODE_V_FLIP BIT(0)
#define DCS_ADDRESS_MODE_H_FLIP BIT(1)
#define DCS_ADDRESS_MODE_LATCH_RL BIT(2) // Latch Data Order.
#define DCS_ADDRESS_MODE_BGR_COLOR BIT(3)
#define DCS_ADDRESS_MODE_LINE_ORDER BIT(4) // Line Refresh Order.
#define DCS_ADDRESS_MODE_SWAP_XY BIT(5) // Page/Column Addressing Reverse Order.
#define DCS_ADDRESS_MODE_MIRROR_X BIT(6) // Column Address Order.
#define DCS_ADDRESS_MODE_MIRROR_Y BIT(7) // Page Address Order.
#define DCS_ADDRESS_MODE_ROTATION_MASK (0xF << 4)
#define DCS_ADDRESS_MODE_ROTATION_90 (DCS_ADDRESS_MODE_SWAP_XY | DCS_ADDRESS_MODE_LINE_ORDER)
#define DCS_ADDRESS_MODE_ROTATION_180 (DCS_ADDRESS_MODE_MIRROR_X | DCS_ADDRESS_MODE_LINE_ORDER)
#define DCS_ADDRESS_MODE_ROTATION_270 (DCS_ADDRESS_MODE_SWAP_XY)
#define DCS_GAMMA_CURVE_NONE 0
#define DCS_GAMMA_CURVE_GC0_1_8 BIT(0)
#define DCS_GAMMA_CURVE_GC1_2_5 BIT(1)
#define DCS_GAMMA_CURVE_GC2_1_0 BIT(2)
#define DCS_GAMMA_CURVE_GC3_1_0 BIT(3) // Are there more?
#define DCS_CONTROL_DISPLAY_SM_FLASHLIGHT BIT(2)
#define DCS_CONTROL_DISPLAY_BACKLIGHT_CTRL BIT(2)
#define DCS_CONTROL_DISPLAY_DIMMING_CTRL BIT(3) // Transition fading.
#define DCS_CONTROL_DISPLAY_BRIGHTNESS_CTRL BIT(5)
#define DCS_CONTROL_DISPLAY_HBM_CTRL0 BIT(6)
#define DCS_CONTROL_DISPLAY_HBM_CTRL1 BIT(7)
#define DCS_SM_COLOR_MODE_SATURATED 0x00 // Disabled. Based on Vivid but over-saturated.
#define DCS_SM_COLOR_MODE_WASHED 0x45
#define DCS_SM_COLOR_MODE_BASIC 0x03 // Real natural profile.
#define DCS_SM_COLOR_MODE_POR_RESET 0x20 // Reset value on power on.
#define DCS_SM_COLOR_MODE_NATURAL 0x23 // Not actually natural.. Extra saturation.
#define DCS_SM_COLOR_MODE_VIVID 0x65 // Saturated.
#define DCS_SM_COLOR_MODE_NIGHT0 0x43 // Based on Washed Out.
#define DCS_SM_COLOR_MODE_NIGHT1 0x15 // Based on Basic.
#define DCS_SM_COLOR_MODE_NIGHT2 0x35 // Based on Natural.
#define DCS_SM_COLOR_MODE_NIGHT3 0x75 // Based on Vivid.
#define DCS_SM_COLOR_MODE_ENABLE BIT(0)
#define PANEL_SM_BL_CANDELA_MAX 2047
/* Switch Panels:
*
* 6.2" panels for Icosa and Iowa SKUs:
* [10] 81 [26]: JDI LPM062M326A
* [10] 96 [09]: JDI LAM062M109A
* [20] 93 [0F]: InnoLux P062CCA-AZ1 (Rev A1)
* [20] 95 [0F]: InnoLux P062CCA-AZ2 (Rev B1)
* [20] 96 [0F]: InnoLux P062CCA-??? (Rev XX) [UNCONFIRMED MODEL+REV]
* [20] 97 [0F]: InnoLux P062CCA-??? (Rev XX) [UNCONFIRMED MODEL+REV]
* [20] 98 [0F]: InnoLux P062CCA-??? (Rev XX) [UNCONFIRMED MODEL+REV]
* [20] 99 [0F]: InnoLux P062CCA-??? (Rev XX) [UNCONFIRMED MODEL+REV]
* [30] 93 [0F]: AUO A062TAN00 (59.06A33.000)
* [30] 94 [0F]: AUO A062TAN01 (59.06A33.001)
* [30] 95 [0F]: AUO A062TAN02 (59.06A33.002)
* [30] 97 [0F]: AUO A062TAN02 (59.06A33.002) [From photo of assumed same panel]
* [30] 98 [0F]: AUO A062TAN0? [UNCONFIRMED MODEL]
* [30] XX [0F]: AUO A062TAN03 (59.06A33.003) [UNCONFIRMED ID]
*
*
* 5.5" panels for Hoag SKU:
* [20] 94 [10]: InnoLux 2J055IA-27A (Rev B1) (6203B001P4000)
* [20] 95 [10]: InnoLux 2J055IA-27A (Rev XX) [UNCONFIRMED MODEL+REV]
* [20] 96 [10]: InnoLux 2J055IA-27A (Rev XX) [UNCONFIRMED MODEL+REV]
* [30] 93 [10]: AUO A055TAN01 (59.05A30.001)
* [30] 94 [10]: AUO A055TAN02 (59.05A30.002)
* [30] 95 [10]: AUO A055TAN03 (59.05A30.003)
* [40] 94 [10]: Sharp LQ055T1SW10 (Rev P)
*
*
* 7.0" OLED panels for Aula SKU:
* [50] 9B [20]: Samsung AMS699VC01-0 (Rev 2.5)
*/
/* Display ID Decoding:
*
* byte0: Vendor
* byte1: Model
* byte2: Board
*
* Vendors:
* 10h: Japan Display Inc.
* 20h: InnoLux Corporation
* 30h: AU Optronics
* 40h: Sharp
* 50h: Samsung
*
* Boards, Panel Size:
* 0Fh: Icosa/Iowa, 6.2"
* 10h: Hoag, 5.5"
* 20h: Aula, 7.0"
*/
enum
{
PANEL_JDI_XXX062M = 0x10,
PANEL_JDI_LAM062M109A = 0x0910, // SI.
PANEL_JDI_LPM062M326A = 0x2610, // LTPS.
PANEL_INL_P062CCA_AZ1 = 0x0F20,
PANEL_AUO_A062TAN01 = 0x0F30,
PANEL_INL_2J055IA_27A = 0x1020,
PANEL_AUO_A055TAN01 = 0x1030,
PANEL_SHP_LQ055T1SW10 = 0x1040,
PANEL_SAM_AMS699VC01 = 0x2050,
// Found on 6/2" clones. Unknown markings. Clone of AUO A062TAN01.
// Quality seems JDI like. Has bad low backlight scaling. ID: [83] 94 [0F]. Sometimes reports [30] 94 [0F]. Both IDs have correct CRC16.
PANEL_OEM_CLONE_6_2 = 0x0F83,
// Found on 5.5" clones with AUO A055TAN02 (59.05A30.001) fake markings.
PANEL_OEM_CLONE_5_5 = 0x00B3,
// Found on 5.5" clones with AUO A055TAN02 (59.05A30.001) fake markings.
PANEL_OEM_CLONE = 0x0000
//0x0F40 [40] 94 [0F], 5.5" clone
};
void display_init();
void display_backlight_pwm_init();
void display_end();
/*! Interrupt management. */
void display_enable_interrupt(u32 intr);
void display_disable_interrupt(u32 intr);
void display_wait_interrupt(u32 intr);
/*! Get/Set Display panel ID. */
u32 display_get_verbose_panel_id();
u16 display_get_decoded_panel_id();
void display_set_decoded_panel_id(u32 id);
/*! MIPI DCS register management */
int display_dsi_read(u8 cmd, u32 len, void *data);
int display_dsi_vblank_read(u8 cmd, u32 len, void *data);
void display_dsi_write(u8 cmd, u32 len, void *data);
void display_dsi_vblank_write(u8 cmd, u32 len, void *data);
/*! Show one single color on the display. */
void display_color_screen(u32 color);
/*! Screen backlight ON/OFF or set via duty and fading. */
void display_backlight(bool enable);
void display_backlight_brightness(u32 brightness, u32 step_delay);
u32 *display_init_window_a_pitch();
u32 *display_init_window_a_pitch_vic();
u32 *display_init_window_a_pitch_inv();
u32 *display_init_window_a_block();
u32 *display_init_window_d_console();
void display_window_disable(u32 window);
void display_set_framebuffer(u32 window, void *fb);
void display_move_framebuffer(u32 window, void *fb);
void display_window_d_console_enable();
void display_window_d_console_disable();
void display_cursor_init(void *crs_fb, u32 size);
void display_cursor_set_pos(u32 x, u32 y);
void display_cursor_deinit();
#endif
================================================
FILE: bdk/display/di.inl
================================================
/*
* Copyright (c) 2018 naehrwert
* Copyright (c) 2018-2025 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Display A config.
static const reg_cfg_t _di_dc_init_config[] = {
/* Display init */
{DC_CMD_STATE_ACCESS, READ_MUX_ASSEMBLY | WRITE_MUX_ASSEMBLY},
{DC_CMD_REG_ACT_CONTROL, WIN_A_ACT_HCNTR_SEL | WIN_B_ACT_HCNTR_SEL | WIN_C_ACT_HCNTR_SEL | WIN_D_ACT_HCNTR_SEL},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
{DC_DISP_DC_MCCIF_FIFOCTRL, 0},
{DC_DISP_DISP_MEM_HIGH_PRIORITY, 0},
{DC_DISP_DISP_MEM_HIGH_PRIORITY_TIMER, 0},
{DC_CMD_DISPLAY_POWER_CONTROL, PW0_ENABLE | PW1_ENABLE | PW2_ENABLE | PW3_ENABLE | PW4_ENABLE | PM0_ENABLE | PM1_ENABLE},
{DC_CMD_GENERAL_INCR_SYNCPT_CNTRL, SYNCPT_CNTRL_NO_STALL},
{DC_CMD_CONT_SYNCPT_VSYNC, SYNCPT_VSYNC_ENABLE | SYNCPT_VSYNC_INDX(9)},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE | WIN_D_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ | WIN_D_ACT_REQ},
/* Disable A/B/C/D Windows */
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT | WINDOW_B_SELECT | WINDOW_C_SELECT | WINDOW_D_SELECT},
{DC_WIN_WIN_OPTIONS, 0},
{DC_WIN_DV_CONTROL, 0},
/* Setup default YUV colorspace conversion coefficients */
{DC_WINC_CSC_YOF, 0xF0},
{DC_WINC_CSC_KYRGB, 0x12A},
{DC_WINC_CSC_KUR, 0},
{DC_WINC_CSC_KVR, 0x198},
{DC_WINC_CSC_KUG, 0x39B},
{DC_WINC_CSC_KVG, 0x32F},
{DC_WINC_CSC_KUB, 0x204},
{DC_WINC_CSC_KVB, 0},
/* Init color, format and background */
{DC_DISP_DISP_COLOR_CONTROL, BASE_COLOR_SIZE_888},
{DC_DISP_DISP_INTERFACE_CONTROL, DISP_DATA_FORMAT_DF1P1C},
{DC_COM_PIN_OUTPUT_POLARITY(1), LSC0_OUTPUT_POLARITY_LOW},
{DC_COM_PIN_OUTPUT_POLARITY(3), 0},
{DC_DISP_BLEND_BACKGROUND_COLOR, 0},
{DC_COM_CRC_CONTROL, 0},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE | WIN_D_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ | WIN_D_ACT_REQ},
/* Stop display */
{DC_WINBUF_BLEND_LAYER_CONTROL, WIN_BLEND_BYPASS | WIN_BLEND_DEPTH(255)},
{DC_CMD_DISPLAY_COMMAND_OPTION0, 0},
{DC_DISP_DISP_WIN_OPTIONS, 0},
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_STOP},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE | WIN_D_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ | WIN_B_ACT_REQ | WIN_C_ACT_REQ | WIN_D_ACT_REQ}
};
// DSI Init config.
static const reg_cfg_t _di_dsi_seq_pkt_reset_config0[] = {
{DSI_WR_DATA, 0},
{DSI_INT_ENABLE, 0},
{DSI_INT_STATUS, 0},
{DSI_INT_MASK, 0},
{DSI_INIT_SEQ_DATA_0, 0},
{DSI_INIT_SEQ_DATA_1, 0},
{DSI_INIT_SEQ_DATA_2, 0},
{DSI_INIT_SEQ_DATA_3, 0}
};
static const reg_cfg_t _di_dsi_seq_pkt_reset_config1[] = {
{DSI_DCS_CMDS, 0},
{DSI_PKT_SEQ_0_LO, 0},
{DSI_PKT_SEQ_1_LO, 0},
{DSI_PKT_SEQ_2_LO, 0},
{DSI_PKT_SEQ_3_LO, 0},
{DSI_PKT_SEQ_4_LO, 0},
{DSI_PKT_SEQ_5_LO, 0},
{DSI_PKT_SEQ_0_HI, 0},
{DSI_PKT_SEQ_1_HI, 0},
{DSI_PKT_SEQ_2_HI, 0},
{DSI_PKT_SEQ_3_HI, 0},
{DSI_PKT_SEQ_4_HI, 0},
{DSI_PKT_SEQ_5_HI, 0},
{DSI_CONTROL, 0}
};
static const reg_cfg_t _di_dsi_init_pads_t210b01[] = {
{DSI_PAD_CONTROL_1, 0},
{DSI_PAD_CONTROL_2, 0},
{DSI_PAD_CONTROL_3, 0},
{DSI_PAD_CONTROL_4, 0},
{DSI_PAD_CONTROL_5_B01, 0},
{DSI_PAD_CONTROL_6_B01, 0},
{DSI_PAD_CONTROL_7_B01, 0}
};
static const reg_cfg_t _di_dsi_init_config[] = {
{DSI_PAD_CONTROL_CD, 0},
{DSI_SOL_DELAY, 24},
{DSI_MAX_THRESHOLD, 480},
{DSI_TRIGGER, 0},
{DSI_INIT_SEQ_CONTROL, 0},
{DSI_PKT_LEN_0_1, 0},
{DSI_PKT_LEN_2_3, 0},
{DSI_PKT_LEN_4_5, 0},
{DSI_PKT_LEN_6_7, 0},
{DSI_PAD_CONTROL_1, 0},
/* DSI PHY timings Init - 19.2 MHz */
{DSI_PHY_TIMING_0, 0x6070603},
{DSI_PHY_TIMING_1, 0x40A0E05},
{DSI_PHY_TIMING_2, 0x30109},
{DSI_BTA_TIMING, 0x190A14},
/* DSI timeout */
{DSI_TIMEOUT_0, DSI_TIMEOUT_LRX(0x2000) | DSI_TIMEOUT_HTX(0xFFFF)},
{DSI_TIMEOUT_1, DSI_TIMEOUT_PR(0x765) | DSI_TIMEOUT_TA(0x2000)},
{DSI_TO_TALLY, 0},
{DSI_PAD_CONTROL_0, DSI_PAD_CONTROL_VS1_PULLDN(0) | DSI_PAD_CONTROL_VS1_PDIO(0)}, // Power up.
{DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
};
// DSI LP config.
static const reg_cfg_t _di_dsi_timing_lp_config[] = {
{DSI_PAD_CONTROL_1, 0},
/* DSI PHY timings LP - 50 MHz */
{DSI_PHY_TIMING_0, 0x6070603},
{DSI_PHY_TIMING_1, 0x40A0E05},
{DSI_PHY_TIMING_2, 0x30118},
{DSI_BTA_TIMING, 0x190A14},
/* DSI timeout */
{DSI_TIMEOUT_0, DSI_TIMEOUT_LRX(0x2000) | DSI_TIMEOUT_HTX(0xFFFF)},
{DSI_TIMEOUT_1, DSI_TIMEOUT_PR(0x1343) | DSI_TIMEOUT_TA(0x2000)},
{DSI_TO_TALLY, 0},
{DSI_HOST_CONTROL, DSI_HOST_CONTROL_CRC_RESET | DSI_HOST_CONTROL_TX_TRIG_HOST | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC},
{DSI_CONTROL, DSI_CONTROL_LANES(3) | DSI_CONTROL_HOST_ENABLE},
{DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
{DSI_MAX_THRESHOLD, 64},
{DSI_TRIGGER, 0},
{DSI_TX_CRC, 0},
{DSI_INIT_SEQ_CONTROL, 0}
};
// DSI panel JDI config.
static const reg_cfg_t _di_dsi_panel_init_config_jdi[] = {
{DSI_WR_DATA, 0x0439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
{DSI_WR_DATA, 0x9483FFB9}, // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0xBD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0 to 0xBD.
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x1939}, // MIPI_DSI_DCS_LONG_WRITE: 25 bytes.
{DSI_WR_DATA, 0xAAAAAAD8}, // Register: 0xD8.
{DSI_WR_DATA, 0xAAAAAAEB},
{DSI_WR_DATA, 0xAAEBAAAA},
{DSI_WR_DATA, 0xAAAAAAAA},
{DSI_WR_DATA, 0xAAAAAAEB},
{DSI_WR_DATA, 0xAAEBAAAA},
{DSI_WR_DATA, 0xAA},
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x01BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 1 to 0xBD.
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x2739}, // MIPI_DSI_DCS_LONG_WRITE: 39 bytes.
{DSI_WR_DATA, 0xFFFFFFD8}, // Register: 0xD8.
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFF},
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x02BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 2 to 0xBD.
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0xF39}, // MIPI_DSI_DCS_LONG_WRITE: 15 bytes.
{DSI_WR_DATA, 0xFFFFFFD8}, // Register: 0xD8.
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFFFF},
{DSI_WR_DATA, 0xFFFFFF},
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x00BD15}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 0 to 0xBD.
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x06D915}, // MIPI_DSI_DCS_SHORT_WRITE_PARAM: 6 to 0xD9.
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
{DSI_WR_DATA, 0x000000B9}, // MIPI_DCS_PRIV_SET_EXTC. Disable.
{DSI_TRIGGER, DSI_TRIGGER_HOST}
};
// DSI HS packet config.
static const reg_cfg_t _di_dsi_seq_pkt_video_non_burst_no_eot_config[] = {
{DSI_PAD_CONTROL_1, 0},
/* DSI PHY timings HP - 234 MHz */
{DSI_PHY_TIMING_0, 0x6070603},
{DSI_PHY_TIMING_1, 0x40A0E05},
{DSI_PHY_TIMING_2, 0x30172},
{DSI_BTA_TIMING, 0x190A14},
/* DSI timeout */
{DSI_TIMEOUT_0, DSI_TIMEOUT_LRX(0x2000) | DSI_TIMEOUT_HTX(0xA40)},
{DSI_TIMEOUT_1, DSI_TIMEOUT_PR(0x5A2F) | DSI_TIMEOUT_TA(0x2000)},
{DSI_TO_TALLY, 0},
/* DSI packet sequence */
{DSI_PKT_SEQ_0_LO, 0x40000208},
{DSI_PKT_SEQ_2_LO, 0x40000308},
{DSI_PKT_SEQ_4_LO, 0x40000308},
{DSI_PKT_SEQ_1_LO, 0x40000308},
{DSI_PKT_SEQ_3_LO, 0x3F3B2B08},
{DSI_PKT_SEQ_3_HI, 0x2CC},
{DSI_PKT_SEQ_5_LO, 0x3F3B2B08},
{DSI_PKT_SEQ_5_HI, 0x2CC},
{DSI_PKT_LEN_0_1, PKT1_LEN(206) | PKT0_LEN(0)},
{DSI_PKT_LEN_2_3, PKT1_LEN(2160) | PKT0_LEN(418)},
{DSI_PKT_LEN_4_5, PKT1_LEN(0) | PKT0_LEN(400)},
{DSI_PKT_LEN_6_7, PKT1_LEN(0) | PKT0_LEN(400)},
{DSI_HOST_CONTROL, 0}
};
// DSI mode config.
static const reg_cfg_t _di_dsi_host_mode_config[] = {
{DSI_TRIGGER, 0},
{DSI_CONTROL, 0},
{DSI_SOL_DELAY, 6},
{DSI_MAX_THRESHOLD, 480},
{DSI_POWER_CONTROL, DSI_POWER_CONTROL_ENABLE},
{DSI_CONTROL, DSI_CONTROL_HS_CLK_CTRL | DSI_CONTROL_FORMAT(3) | DSI_CONTROL_LANES(3) | DSI_CONTROL_VIDEO_ENABLE},
{DSI_HOST_CONTROL, DSI_HOST_CONTROL_HS | DSI_HOST_CONTROL_FIFO_SEL | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC},
{DSI_CONTROL, DSI_CONTROL_HS_CLK_CTRL | DSI_CONTROL_FORMAT(3) | DSI_CONTROL_LANES(3) | DSI_CONTROL_VIDEO_ENABLE},
{DSI_HOST_CONTROL, DSI_HOST_CONTROL_TX_TRIG_SOL | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC},
{DSI_HOST_CONTROL, DSI_HOST_CONTROL_HS | DSI_HOST_CONTROL_TX_TRIG_SOL | DSI_HOST_CONTROL_CS | DSI_HOST_CONTROL_ECC}
};
// MIPI CAL config.
static const reg_cfg_t _di_mipi_pad_cal_config[] = {
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0},
{MIPI_CAL_CIL_MIPI_CAL_STATUS, 0xF3F10000},
{MIPI_CAL_MIPI_BIAS_PAD_CFG0, 0},
{MIPI_CAL_MIPI_BIAS_PAD_CFG2, 0}
};
// DSI pad config.
static const reg_cfg_t _di_dsi_pad_cal_config_t210[] = {
{DSI_PAD_CONTROL_1, 0},
{DSI_PAD_CONTROL_2, 0},
{DSI_PAD_CONTROL_3, DSI_PAD_PREEMP_PD_CLK(0x3) | DSI_PAD_PREEMP_PU_CLK(0x3) | DSI_PAD_PREEMP_PD(0x03) | DSI_PAD_PREEMP_PU(0x3)},
{DSI_PAD_CONTROL_4, 0}
};
static const reg_cfg_t _di_dsi_pad_cal_config_t210b01[] = {
{DSI_PAD_CONTROL_1, 0},
{DSI_PAD_CONTROL_2, 0},
{DSI_PAD_CONTROL_3, 0},
{DSI_PAD_CONTROL_4, 0x77777},
{DSI_PAD_CONTROL_5_B01, 0x77777},
{DSI_PAD_CONTROL_6_B01, DSI_PAD_PREEMP_PD_CLK(0x1) | DSI_PAD_PREEMP_PU_CLK(0x1) | DSI_PAD_PREEMP_PD(0x01) | DSI_PAD_PREEMP_PU(0x1)},
{DSI_PAD_CONTROL_7_B01, 0}
};
// MIPI CAL config.
static const reg_cfg_t _di_mipi_dsi_cal_prod_config_t210[] = {
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG, 0x200200},
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG, 0x200200},
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2, 0x200002},
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0x200002}
};
static const reg_cfg_t _di_mipi_dsi_cal_prod_config_t210b01[] = {
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG, 0x200006},
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG, 0x200006},
{MIPI_CAL_DSIA_MIPI_CAL_CONFIG_2, 0x260000},
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0x260000}
};
static const reg_cfg_t _di_mipi_dsi_cal_unused_config[] = {
{MIPI_CAL_CILA_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_CILB_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_CILC_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_CILD_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_CILE_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_CILF_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_DSIC_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_DSID_MIPI_CAL_CONFIG, 0},
{MIPI_CAL_DSIB_MIPI_CAL_CONFIG_2, 0},
{MIPI_CAL_DSIC_MIPI_CAL_CONFIG_2, 0},
{MIPI_CAL_DSID_MIPI_CAL_CONFIG_2, 0}
};
// Display A enable config.
static const reg_cfg_t _di_dc_video_mode_config[] = {
/* Set panel timings */
{DC_DISP_DISP_TIMING_OPTIONS, VSYNC_H_POSITION(0)},
{DC_DISP_REF_TO_SYNC, V_REF_TO_SYNC(1) | H_REF_TO_SYNC(0)},
{DC_DISP_SYNC_WIDTH, V_SYNC_WIDTH(1) | H_SYNC_WIDTH(72)},
{DC_DISP_BACK_PORCH, V_BACK_PORCH(9) | H_BACK_PORCH(72)},
{DC_DISP_FRONT_PORCH, V_FRONT_PORCH(10) | H_FRONT_PORCH(136)},
{DC_DISP_ACTIVE, V_DISP_ACTIVE(1280) | H_DISP_ACTIVE(720)},
/* End of Display timings */
{DC_DISP_SHIFT_CLOCK_OPTIONS, SC1_H_QUALIFIER_NONE | SC0_H_QUALIFIER_NONE},
{DC_COM_PIN_OUTPUT_ENABLE(1), 0},
{DC_DISP_DATA_ENABLE_OPTIONS, DE_SELECT_ACTIVE | DE_CONTROL_NORMAL},
/* Start continuous display. */
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
{DC_CMD_GENERAL_INCR_SYNCPT, SYNCPT_GENERAL_COND(COND_REG_WR_SAFE) | SYNCPT_GENERAL_INDX(1)},
{DC_CMD_GENERAL_INCR_SYNCPT, SYNCPT_GENERAL_COND(COND_REG_WR_SAFE) | SYNCPT_GENERAL_INDX(1)},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
};
// Display A disable config.
static const reg_cfg_t _di_dc_video_disable_config[] = {
{DC_CMD_INT_MASK, 0},
{DC_CMD_STATE_ACCESS, READ_MUX_ASSEMBLY | WRITE_MUX_ASSEMBLY},
{DC_CMD_INT_ENABLE, 0},
{DC_CMD_CONT_SYNCPT_VSYNC, 0},
/* Stop display. */
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_STOP},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
{DC_CMD_GENERAL_INCR_SYNCPT, SYNCPT_GENERAL_COND(COND_REG_WR_SAFE) | SYNCPT_GENERAL_INDX(1)},
{DC_CMD_GENERAL_INCR_SYNCPT, SYNCPT_GENERAL_COND(COND_REG_WR_SAFE) | SYNCPT_GENERAL_INDX(1)},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
// TODO: LCD panels should sleep for 40ms here.
{DC_CMD_DISPLAY_POWER_CONTROL, 0},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ},
};
// DSI panel JDI deinit config.
static const reg_cfg_t _di_dsi_panel_deinit_config_jdi[] = {
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
{DSI_WR_DATA, 0x9483FFB9}, // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x2139}, // MIPI_DSI_DCS_LONG_WRITE: 33 bytes.
{DSI_WR_DATA, 0x191919D5}, // Register: 0xD5.
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19},
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0xB39}, // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
{DSI_WR_DATA, 0x4F0F41B1}, // MIPI_DCS_PRIV_SET_POWER_CONTROL.
{DSI_WR_DATA, 0xF179A433},
{DSI_WR_DATA, 0x002D81},
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
{DSI_WR_DATA, 0x000000B9}, // MIPI_DCS_PRIV_SET_EXTC. Disable.
{DSI_TRIGGER, DSI_TRIGGER_HOST}
};
// DSI panel AUO deinit config.
static const reg_cfg_t _di_dsi_panel_deinit_config_auo[] = {
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
{DSI_WR_DATA, 0x9483FFB9}, // MIPI_DCS_PRIV_SET_EXTC. (Pass: FF 83 94).
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x2C39}, // MIPI_DSI_DCS_LONG_WRITE: 44 bytes.
{DSI_WR_DATA, 0x191919D5}, // Register: 0xD5.
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x2C39}, // MIPI_DSI_DCS_LONG_WRITE: 44 bytes.
{DSI_WR_DATA, 0x191919D6}, // Register: 0xD6.
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_WR_DATA, 0x19191919},
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0xB39}, // MIPI_DSI_DCS_LONG_WRITE: 11 bytes.
{DSI_WR_DATA, 0x711148B1}, // MIPI_DCS_PRIV_SET_POWER_CONTROL. (Not deep standby, BT1 / XDK, VRH gamma volt adj 49 / x40).
// (NVRH gamma volt adj 9, Amplifier current small / x30, FS0 freq Fosc/80 / FS1 freq Fosc/32, Enter standby / PON / VCOMG).
{DSI_WR_DATA, 0x71143209},
{DSI_WR_DATA, 0x114D31}, // (Unknown).
{DSI_TRIGGER, DSI_TRIGGER_HOST},
{DSI_WR_DATA, 0x439}, // MIPI_DSI_DCS_LONG_WRITE: 4 bytes.
{DSI_WR_DATA, 0x000000B9}, // MIPI_DCS_PRIV_SET_EXTC. Disable.
{DSI_TRIGGER, DSI_TRIGGER_HOST}
};
/*
static const reg_cfg_t _di_init_config_invert[] = {
{DSI_WR_DATA, 0x239},
{DSI_WR_DATA, 0x02C1}, // INV_EN.
{DSI_TRIGGER, DSI_TRIGGER_HOST},
};
*/
// Display A Window A one color config.
static const reg_cfg_t _di_win_one_color[] = {
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT | WINDOW_B_SELECT | WINDOW_C_SELECT | WINDOW_D_SELECT},
{DC_WIN_WIN_OPTIONS, 0},
{DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY} // Continuous display.
};
// Display A Window A linear pitch config.
static const reg_cfg_t _di_winA_pitch[] = {
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
{DC_WIN_WIN_OPTIONS, 0},
{DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
{DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8}, // NX Default: T_A8B8G8R8, WIN_COLOR_DEPTH_R8G8B8A8.
{DC_WIN_POSITION, 0}, //(0,0)
{DC_WIN_H_INITIAL_DDA, 0},
{DC_WIN_V_INITIAL_DDA, 0},
{DC_WIN_PRESCALED_SIZE, V_PRESCALED_SIZE(1280) | H_PRESCALED_SIZE(720 * 4)},
{DC_WIN_DDA_INC, V_DDA_INC(0x1000) | H_DDA_INC(0x1000)}, // 1.0x.
{DC_WIN_SIZE, V_SIZE(1280) | H_SIZE(720)},
{DC_WIN_LINE_STRIDE, UV_LINE_STRIDE(720 * 2) | LINE_STRIDE(720 * 4)}, // 720*2x720*4 (= 0x600 x 0xC00) bytes, see TRM for alignment requirements.
{DC_WIN_BUFFER_CONTROL, BUFFER_CONTROL_HOST},
{DC_WINBUF_SURFACE_KIND, PITCH},
{DC_WINBUF_START_ADDR, IPL_FB_ADDRESS}, // Framebuffer address.
{DC_WINBUF_ADDR_H_OFFSET, 0},
{DC_WINBUF_ADDR_V_OFFSET, 0},
{DC_WIN_WIN_OPTIONS, WIN_ENABLE}, // Enable window AD.
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY}, // Continuous display.
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ}
};
// Display A Window A linear pitch + Win D support config.
static const reg_cfg_t _di_winA_pitch_vic[] = {
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
{DC_WIN_WIN_OPTIONS, 0},
{DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
{DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8}, // NX Default: T_A8B8G8R8, WIN_COLOR_DEPTH_R8G8B8A8.
{DC_WIN_POSITION, 0}, //(0,0)
{DC_WIN_H_INITIAL_DDA, 0},
{DC_WIN_V_INITIAL_DDA, 0},
{DC_WIN_PRESCALED_SIZE, V_PRESCALED_SIZE(1280) | H_PRESCALED_SIZE(720 * 4)},
{DC_WIN_DDA_INC, V_DDA_INC(0x1000) | H_DDA_INC(0x1000)}, // 1.0x.
{DC_WIN_SIZE, V_SIZE(1280) | H_SIZE(720)},
{DC_WIN_LINE_STRIDE, UV_LINE_STRIDE(720 * 2) | LINE_STRIDE(720 * 4)}, // 720*2x720*4 (= 0x600 x 0xC00) bytes, see TRM for alignment requirements.
{DC_WIN_BUFFER_CONTROL, BUFFER_CONTROL_HOST},
{DC_WINBUF_SURFACE_KIND, PITCH},
{DC_WINBUF_START_ADDR, NYX_FB_ADDRESS}, // Framebuffer address.
{DC_WINBUF_ADDR_H_OFFSET, 0},
{DC_WINBUF_ADDR_V_OFFSET, 0},
{DC_WIN_WIN_OPTIONS, WIN_ENABLE}, // Enable window AD.
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY}, // Continuous display.
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ}
};
// Display A Window A linear pitch inverse + Win D support config.
static const reg_cfg_t _di_winA_pitch_inv[] = {
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
{DC_WIN_WIN_OPTIONS, 0},
{DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
{DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8}, // NX Default: T_A8B8G8R8, WIN_COLOR_DEPTH_R8G8B8A8.
{DC_WIN_POSITION, 0}, //(0,0)
{DC_WIN_H_INITIAL_DDA, 0},
{DC_WIN_V_INITIAL_DDA, 0},
{DC_WIN_PRESCALED_SIZE, V_PRESCALED_SIZE(1280) | H_PRESCALED_SIZE(720 * 4)},
{DC_WIN_DDA_INC, V_DDA_INC(0x1000) | H_DDA_INC(0x1000)}, // 1.0x.
{DC_WIN_SIZE, V_SIZE(1280) | H_SIZE(720)},
{DC_WIN_LINE_STRIDE, UV_LINE_STRIDE(720 * 2) | LINE_STRIDE(720 * 4)}, // 720*2x720*4 (= 0x600 x 0xC00) bytes, see TRM for alignment requirements.
{DC_WIN_BUFFER_CONTROL, BUFFER_CONTROL_HOST},
{DC_WINBUF_SURFACE_KIND, PITCH},
{DC_WINBUF_START_ADDR, NYX_FB_ADDRESS}, // Framebuffer address.
{DC_WINBUF_ADDR_H_OFFSET, 0}, // Linear: 0x383FFC, Block: 0x3813FC.
{DC_WINBUF_ADDR_V_OFFSET, 1279}, // Linear: 1279, Block: 0.
{DC_WIN_WIN_OPTIONS, WIN_ENABLE | V_DIRECTION}, // Enable window AD.
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY}, // Continuous display.
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ}
};
// Display A Window A block linear config.
static const reg_cfg_t _di_winA_block[] = {
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_A_SELECT},
{DC_WIN_WIN_OPTIONS, 0},
{DC_DISP_DISP_WIN_OPTIONS, DSI_ENABLE},
{DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8}, // NX Default: T_A8B8G8R8, WIN_COLOR_DEPTH_R8G8B8A8.
{DC_WIN_POSITION, 0}, //(0,0)
{DC_WIN_H_INITIAL_DDA, 0},
{DC_WIN_V_INITIAL_DDA, 0},
{DC_WIN_PRESCALED_SIZE, V_PRESCALED_SIZE(1280) | H_PRESCALED_SIZE(720 * 4)},
{DC_WIN_DDA_INC, V_DDA_INC(0x1000) | H_DDA_INC(0x1000)}, // 1.0x.
{DC_WIN_SIZE, V_SIZE(1280) | H_SIZE(720)},
{DC_WIN_LINE_STRIDE, UV_LINE_STRIDE(1280 * 2) | LINE_STRIDE(1280 * 4)}, //720*2x720*4 (= 0x600 x 0xC00) bytes, see TRM for alignment requirements.
{DC_WIN_BUFFER_CONTROL, BUFFER_CONTROL_HOST},
{DC_WINBUF_SURFACE_KIND, BLOCK_HEIGHT(4) | BLOCK},
{DC_WINBUF_START_ADDR, NYX_FB_ADDRESS}, // Framebuffer address.
{DC_WINBUF_ADDR_H_OFFSET, 0x3813FC}, // Linear: 0x383FFC, Block: 0x3813FC. Block in HOS: 0x13FF.
{DC_WINBUF_ADDR_V_OFFSET, 0}, // Linear: 1279, Block: 0.
{DC_WIN_WIN_OPTIONS, WIN_ENABLE | SCAN_COLUMN | H_DIRECTION}, // Enable window AD. | SCAN_COLUMN | H_DIRECTION.
{DC_CMD_DISPLAY_COMMAND, DISP_CTRL_MODE_C_DISPLAY}, // Continuous display.
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_A_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_A_ACT_REQ}
};
// Display A Window D config.
static const reg_cfg_t _di_winD_log[] = {
{DC_CMD_DISPLAY_WINDOW_HEADER, WINDOW_D_SELECT},
{DC_WIN_WIN_OPTIONS, 0},
{DC_WIN_COLOR_DEPTH, WIN_COLOR_DEPTH_B8G8R8A8},
{DC_WIN_POSITION, 0}, //(0,0)
{DC_WIN_H_INITIAL_DDA, 0},
{DC_WIN_V_INITIAL_DDA, 0},
{DC_WIN_PRESCALED_SIZE, V_PRESCALED_SIZE(1280) | H_PRESCALED_SIZE(656 * 4)},
{DC_WIN_DDA_INC, V_DDA_INC(0x1000) | H_DDA_INC(0x1000)}, // 1.0x.
{DC_WIN_SIZE, V_SIZE(1280) | H_SIZE(656)},
{DC_WIN_LINE_STRIDE, UV_LINE_STRIDE(656 * 2) | LINE_STRIDE(656 * 4)}, //656*2x656*4 (= 0x600 x 0xC00) bytes, see TRM for alignment requirements.
{DC_WIN_BUFFER_CONTROL, BUFFER_CONTROL_HOST},
{DC_WINBUF_SURFACE_KIND, PITCH},
{DC_WINBUF_START_ADDR, LOG_FB_ADDRESS}, // Framebuffer address.
{DC_WINBUF_ADDR_H_OFFSET, 0},
{DC_WINBUF_ADDR_V_OFFSET, 0},
{DC_WINBUF_BLEND_LAYER_CONTROL, WIN_BLEND_ENABLE | WIN_K1(200) | WIN_BLEND_DEPTH(0)},
{DC_WINBUF_BLEND_MATCH_SELECT, WIN_BLEND_FACT_SRC_COLOR_MATCH_SEL_K1 | WIN_BLEND_FACT_DST_COLOR_MATCH_SEL_NEG_K1},
{DC_CMD_STATE_CONTROL, GENERAL_UPDATE | WIN_D_UPDATE},
{DC_CMD_STATE_CONTROL, GENERAL_ACT_REQ | WIN_D_ACT_REQ},
};
================================================
FILE: bdk/display/vic.c
================================================
/*
* VIC (4.0) driver for Tegra X1
*
* Copyright (c) 2018-2024 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <string.h>
#include "vic.h"
#include <mem/heap.h>
#include <soc/bpmp.h>
#include <soc/clock.h>
#include <soc/timer.h>
#include <soc/t210.h>
#include <utils/types.h>
/* VIC Private registers */
#define PVIC_FALCON_PA_OFFSET 0x1000
#define PVIC_FALCON_ADDR 0x10AC
#define PVIC_FALCON_IDLESTATE 0x104C
/* VIC Control and Status registers. */
/* Fetch Control registers. */
#define VIC_FC_COMPOSE 0x10000
#define COMPOSE_START BIT(0)
#define VIC_FC_CFG_STRUCT_SLOT_INDEX 0x10B00
#define VIC_FC_CFG_STRUCT_SLOT_CFG0 0x10B04
#define SLOT_ENABLE BIT(0)
#define FIELD_CURRENT_ENABLE BIT(8)
#define VIC_FC_CFG_STRUCT_SLOT_CFG2 0x10B0C
#define CACHE_WIDTH(n) ((n) << 16)
#define CACHE_WIDTH_16BX16 0 // Block Linear.
#define CACHE_WIDTH_32BX8 1 // Block Linear.
#define CACHE_WIDTH_64BX4 2 // Block Linear, Pitch. Recommended.
#define CACHE_WIDTH_128BX2 3 // Block Linear, Pitch.
#define CACHE_WIDTH_256BX1 4 // Pitch.
#define OUTPUT_FLIP_X BIT(20)
#define OUTPUT_FLIP_Y BIT(21)
#define OUTPUT_TRANSPOSE BIT(22)
#define VIC_FC_CFG_STRUCT_SLOT_SFC_SIZE 0x10B10
#define VIC_FC_CFG_STRUCT_SLOT_LUMA_SIZE 0x10B14
#define VIC_FC_CFG_STRUCT_SLOT_CHROMA_SIZE 0x10B18
#define VIC_FC_CFG_STRUCT_SLOT_SRC_RECT_LR 0x10B1C
#define VIC_FC_CFG_STRUCT_SLOT_SRC_RECT_TB 0x10B20
#define VIC_FC_CFG_STRUCT_SLOT_DST_RECT_LR 0x10B30
#define VIC_FC_CFG_STRUCT_SLOT_DST_RECT_TB 0x10B34
#define VIC_FC_CFG_STRUCT_TGT_RECT_LR 0x10B38
#define VIC_FC_CFG_STRUCT_TGT_RECT_TB 0x10B3C
#define VIC_FC_SLOT_MAP 0x10C00
#define VIC_FC_FCE_CTRL 0x11000
#define START_TRIGGER BIT(0)
#define HALT_TRIGGER BIT(1)
#define CLEAR_ERROR BIT(8)
#define VIC_FC_FCE_UCODE_ADDR 0x11200
#define VIC_FC_FCE_UCODE_INST 0x11300
/* Surface List registers. */
#define VIC_SL_CFG_STRUCT_SLOT_INDEX 0x12100
#define VIC_SL_CFG_STRUCT_SLOT_DST_RECT_LR 0x12200
#define VIC_SL_CFG_STRUCT_SLOT_DST_RECT_TB 0x12300
#define VIC_SL_CFG_STRUCT_TGT_RECT_LR 0x12400
#define VIC_SL_CFG_STRUCT_TGT_RECT_TB 0x12500
#define VIC_SL_CFG_STRUCT_SLOT_CFG0 0x12600
/* Surface Cache registers. */
#define VIC_SC_PRAMBASE 0x14000
#define VIC_SC_PRAMSIZE 0x14100
#define VIC_SC_SFC0_BASE_LUMA(n) (0x14300 + (n) * 0x100)
/* Blending Output registers. */
#define VIC_BL_TARGET_BASADR 0x22000
#define VIC_BL_CONFIG 0x22800
#define SUBPARTITION_MODE BIT(0)
#define PROCESS_CFG_STRUCT_TRIGGER BIT(2)
#define SLOTMASK(n) ((n) << 8)
#define VIC_BL_CFG_STRUCT_CFG0 0x22C00
#define VIC_BL_CFG_STRUCT_SFC_SIZE 0x22C04
#define VIC_BL_CFG_STRUCT_LUMA_SIZE 0x22C08
#define VIC_BL_CFG_STRUCT_CHROMA_SIZE 0x22C0C
#define VIC_BL_CFG_STRUCT_TGT_RECT_LR 0x22C10
#define VIC_BL_CFG_STRUCT_TGT_RECT_TB 0x22C14
// VIC_FC_CFG_STRUCT_SLOT_CFG2 & VIC_BL_CFG_STRUCT_CFG0.
#define BLK_KIND(n) ((n) << 8)
#define BLK_KIND_PITCH 0
#define BLK_KIND_GENERIC_16BX2 1
#define BLK_HEIGHT(n) ((n) << 12)
#define BLK_HEIGHT_ONE_GOB 0
#define BLK_HEIGHT_SIXTEEN_GOBS 4
// Generic size macros.
#define SIZE_WIDTH(n) (((n) - 1) << 0)
#define SIZE_HEIGHT(n) (((n) - 1) << 16)
#define RECT_LEFT(n) ((n) << 0)
#define RECT_RIGHT(n) (((n) - 1) << 16)
#define RECT_TOP(n) ((n) << 0)
#define RECT_BOTTOM(n) (((n) - 1) << 16)
#define FORMAT_PROGRESSIVE 0
#define SOFT_CLAMP_MIN 0
#define SOFT_CLAMP_MAX 0x3FFu
#define ALPHA_1_0 0x3FFu
typedef struct _OutputConfig {
u64 AlphaFillMode:3;
u64 AlphaFillSlot:3;
u64 BackgroundAlpha:10;
u64 BackgroundR:10;
u64 BackgroundG:10;
u64 BackgroundB:10;
u64 RegammaMode:2;
u64 OutputFlipX:1;
u64 OutputFlipY:1;
u64 OutputTranspose:1;
u64 rsvd1:1;
u64 rsvd2:12;
u64 TargetRectLeft:14;
u64 rsvd3:2;
u64 TargetRectRight:14;
u64 rsvd4:2;
u64 TargetRectTop:14;
u64 rsvd5:2;
u64 TargetRectBottom:14;
u64 rsvd6:2;
} OutputConfig;
typedef struct _OutputSurfaceConfig {
u64 OutPixelFormat:7;
u64 OutChromaLocHoriz:2;
u64 OutChromaLocVert:2;
u64 OutBlkKind:4;
u64 OutBlkHeight:4;
u64 rsvd0:3;
u64 rsvd1:10;
u64 OutSurfaceWidth:14;
u64 OutSurfaceHeight:14;
u64 rsvd2:4;
u64 OutLumaWidth:14;
u64 OutLumaHeight:14;
u64 rsvd3:4;
u64 OutChromaWidth:14;
u64 OutChromaHeight:14;
u64 rsvd4:4;
} OutputSurfaceConfig;
typedef struct _SlotConfig {
u64 SlotEnable:1;
u64 DeNoise:1;
u64 AdvancedDenoise:1;
u64 CadenceDetect:1;
u64 MotionMap:1;
u64 MMapCombine:1;
u64 IsEven:1;
u64 ChromaEven:1;
u64 CurrentFieldEnable:1;
u64 PrevFieldEnable:1;
u64 NextFieldEnable:1;
u64 NextNrFieldEnable:1;
u64 CurMotionFieldEnable:1;
u64 PrevMotionFieldEnable:1;
u64 PpMotionFieldEnable:1;
u64 CombMotionFieldEnable:1;
u64 FrameFormat:4;
u64 FilterLengthY:2;
u64 FilterLengthX:2;
u64 Panoramic:12;
u64 rsvd1:22;
u64 DetailFltClamp:6;
u64 FilterNoise:10;
u64 FilterDetail:10;
u64 ChromaNoise:10;
u64 ChromaDetail:10;
u64 DeinterlaceMode:4;
u64 MotionAccumWeight:3;
u64 NoiseIir:11;
u64 LightLevel:4;
u64 rsvd4:2;
u64 SoftClampLow:10;
u64 SoftClampHigh:10;
u64 rsvd5:3;
u64 rsvd6:9;
u64 PlanarAlpha:10;
u64 ConstantAlpha:1;
u64 StereoInterleave:3;
u64 ClipEnabled:1;
u64 ClearRectMask:8;
u64 DegammaMode:2;
u64 rsvd7:1;
u64 DecompressEnable:1;
u64 rsvd9:5;
u64 DecompressCtbCount:8;
u64 DecompressZbcColor:32;
u64 rsvd12:24;
u64 SourceRectLeft:30;
u64 rsvd14:2;
u64 SourceRectRight:30;
u64 rsvd15:2;
u64 SourceRectTop:30;
u64 rsvd16:2;
u64 SourceRectBottom:30;
u64 rsvd17:2;
u64 DestRectLeft:14;
u64 rsvd18:2;
u64 DestRectRight:14;
u64 rsvd19:2;
u64 DestRectTop:14;
u64 rsvd20:2;
u64 DestRectBottom:14;
u64 rsvd21:2;
u64 rsvd22:32;
u64 rsvd23:32;
} SlotConfig;
typedef struct _SlotSurfaceConfig {
u64 SlotPixelFormat:7;
u64 SlotChromaLocHoriz:2;
u64 SlotChromaLocVert:2;
u64 SlotBlkKind:4;
u64 SlotBlkHeight:4;
u64 SlotCacheWidth:3;
u64 rsvd0:10;
u64 SlotSurfaceWidth:14;
u64 SlotSurfaceHeight:14;
u64 rsvd1:4;
u64 SlotLumaWidth:14;
u64 SlotLumaHeight:14;
u64 rsvd2:4;
u64 SlotChromaWidth:14;
u64 SlotChromaHeight:14;
u64 rsvd3:4;
} SlotSurfaceConfig;
typedef struct _SlotStruct {
SlotConfig slot_cfg;
SlotSurfaceConfig slot_sfc_cfg;
// No need to configure. Reset to zeros.
u8 lumaKeyStruct[0x10];
u8 colorMatrixStruct[0x20];
u8 gamutMatrixStruct[0x20];
u8 blendingSlotStruct[0x10];
} SlotStruct;
typedef struct _vic_config_t {
// No need to configure. Reset to zeros.
u8 pipeConfig[0x10];
OutputConfig out_cfg;
OutputSurfaceConfig out_sfc_cfg;
// No need to configure. Reset to zeros.
u8 out_color_matrix[0x20];
u8 clear_rect[0x10 * 4];
SlotStruct slots[8];
} vic_config_t;
// VIC Fetch Control Engine microcode. Dumped from L4T r33.
u8 vic_fce_ucode[] = {
0x66, 0x00, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x42, 0x40, 0x10, 0x00, 0x4E, 0x01, 0x40, 0x00,
0x6A, 0x07, 0x00, 0x00, 0x6E, 0x23, 0x04, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x4E, 0x01, 0x04, 0x00,
0x6A, 0x0B, 0x00, 0x00, 0x6E, 0x1F, 0x04, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x4E, 0x01, 0x10, 0x00,
0x6A, 0x0F, 0x00, 0x00, 0x6E, 0x1F, 0x04, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x48, 0x80, 0x02, 0x00,
0x0E, 0x11, 0x00, 0x00, 0x6A, 0x14, 0x00, 0x00, 0x6E, 0x08, 0x06, 0x00, 0x6C, 0x00, 0x00, 0x00,
0x4E, 0x01, 0x08, 0x00, 0x6A, 0x18, 0x00, 0x00, 0x6E, 0x26, 0x04, 0x00, 0x6C, 0x00, 0x00, 0x00,
0x4E, 0x01, 0x20, 0x00, 0x6A, 0x1C, 0x00, 0x00, 0x6E, 0x26, 0x04, 0x00, 0x6C, 0x00, 0x00, 0x00,
0x4E, 0x01, 0x02, 0x00, 0x6A, 0x20, 0x00, 0x00, 0x6E, 0x24, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00,
0x56, 0x00, 0x10, 0x00, 0x56, 0x40, 0x10, 0x00, 0x22, 0x41, 0x01, 0x00, 0x6C, 0x00, 0x00, 0x00,
0x62, 0x80, 0x01, 0x00, 0x60, 0x47, 0x00, 0x00, 0x60, 0x87, 0x00, 0x00, 0x01, 0x4A, 0x00, 0x00,
0x55, 0xC0, 0x20, 0x00, 0x00, 0x59, 0x00, 0x00, 0x60, 0x87, 0x00, 0x00, 0x60, 0xC7, 0x00, 0x00,
0x01, 0x93, 0x00, 0x00, 0x40, 0x82, 0x02, 0x00, 0x4E, 0x02, 0x00, 0x00, 0x6B, 0x34, 0x00, 0x00,
0x43, 0xC1, 0x10, 0x00, 0x42, 0x02, 0x03, 0x00, 0x00, 0x23, 0x01, 0x00, 0x24, 0xD4, 0x00, 0x00,
0x56, 0x40, 0x3D, 0x00, 0x04, 0xEB, 0x00, 0x00, 0x60, 0x07, 0x01, 0x00, 0x60, 0x47, 0x00, 0x00,
0x6A, 0x3E, 0x00, 0x00, 0x55, 0xC0, 0x30, 0x00, 0x48, 0x00, 0x01, 0x00, 0x48, 0x40, 0x01, 0x00,
0x48, 0x80, 0x01, 0x00, 0x6B, 0x28, 0x02, 0x00, 0x56, 0x40, 0x09, 0x00, 0x04, 0x4D, 0x01, 0x00,
0x06, 0x4D, 0x00, 0x00, 0x42, 0xC0, 0x03, 0x00, 0x56, 0x80, 0x09, 0x00, 0x04, 0xFE, 0x01, 0x00,
0x00, 0xF9, 0x01, 0x00, 0x4E, 0x02, 0x00, 0x00, 0x6B, 0x32, 0x02, 0x00, 0x55, 0x40, 0x2F, 0x00,
0x56, 0x80, 0x0D, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x6A, 0x0D, 0x02, 0x00, 0x55, 0x40, 0x31, 0x00,
0x56, 0x80, 0x0B, 0x00, 0x0C, 0x2B, 0x00, 0x00, 0x6A, 0x13, 0x02, 0x00, 0x43, 0x45, 0x03, 0x00,
0x42, 0x86, 0x03, 0x00, 0x4D, 0x06, 0x02, 0x00, 0x6A, 0x0D, 0x02, 0x00, 0x42, 0x86, 0x03, 0x00,
0x22, 0x7E, 0x01, 0x00, 0x4E, 0x04, 0x00, 0x00, 0x6B, 0x32, 0x02, 0x00, 0x55, 0x40, 0x17, 0x00,
0x0D, 0x2C, 0x00, 0x00, 0x56, 0xC0, 0x09, 0x00, 0x6A, 0x1E, 0x02, 0x00, 0x48, 0xC0, 0x01, 0x00,
0x43, 0x04, 0x03, 0x00, 0x6C, 0x20, 0x02, 0x00, 0x55, 0x40, 0x19, 0x00, 0x01, 0x2C, 0x01, 0x00,
0x65, 0x23, 0x01, 0x00, 0x42, 0x42, 0x03, 0x00, 0x00, 0x2C, 0x01, 0x00, 0x24, 0x14, 0x01, 0x00,
0x00, 0x2C, 0x01, 0x00, 0x24, 0x14, 0x01, 0x00, 0x00, 0x3C, 0x01, 0x00, 0x42, 0x04, 0x09, 0x00,
0x42, 0xC3, 0x02, 0x00, 0x65, 0x54, 0x01, 0x00, 0x65, 0x55, 0x01, 0x00, 0x42, 0x45, 0x0D, 0x00,
0x62, 0x03, 0x00, 0x00, 0x62, 0x44, 0x00, 0x00, 0x62, 0x85, 0x00, 0x00, 0x62, 0xC2, 0x00, 0x00,
0x22, 0x48, 0x1F, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x48, 0x00, 0x01, 0x00, 0x6C, 0x28, 0x02, 0x00,
0x62, 0x80, 0x01, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x47, 0x00, 0x00, 0x60, 0x87, 0x00, 0x00,
0x01, 0x01, 0x00, 0x00, 0x43, 0x00, 0x02, 0x00, 0x40, 0x00, 0x02, 0x00, 0x01, 0xCA, 0x01, 0x00,
0x60, 0x03, 0x01, 0x00, 0x01, 0xA0, 0x01, 0x00, 0x60, 0x40, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00,
0x55, 0xC0, 0x2E, 0x00, 0x01, 0x18, 0x00, 0x00, 0x43, 0x00, 0x04, 0x00, 0x43, 0x41, 0x06, 0x00,
0x6F, 0x00, 0x00, 0x00, 0x61, 0xC1, 0x00, 0x00, 0x61, 0x42, 0x01, 0x00, 0x65, 0xB5, 0x00, 0x00,
0x65, 0x73, 0x01, 0x00, 0x65, 0x35, 0x01, 0x00, 0x65, 0x34, 0x01, 0x00, 0x42, 0x04, 0x0D, 0x00,
0x01, 0x14, 0x01, 0x00, 0x42, 0x04, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x43, 0x03, 0x05, 0x00,
0x43, 0x85, 0x02, 0x00, 0x00, 0xAA, 0x00, 0x00, 0x48, 0x46, 0x01, 0x00, 0x65, 0xEB, 0x00, 0x00,
0x00, 0x9A, 0x00, 0x00, 0x65, 0xB2, 0x01, 0x00, 0x00, 0xA6, 0x01, 0x00, 0x42, 0x86, 0x0D, 0x00,
0x61, 0x42, 0x01, 0x00, 0x01, 0xAE, 0x01, 0x00, 0x00, 0x71, 0x00, 0x00, 0x42, 0x82, 0x08, 0x00,
0x42, 0xC3, 0x08, 0x00, 0x48, 0x40, 0x01, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6E, 0x34, 0x02, 0x00,
0x65, 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x6C, 0x36, 0x04, 0x00, 0x6E, 0x34, 0x02, 0x00,
0x48, 0x7F, 0x01, 0x00, 0x6C, 0x0A, 0x06, 0x00, 0x6E, 0x34, 0x02, 0x00, 0x6E, 0x05, 0x04, 0x00,
0x65, 0x79, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x41, 0x87, 0x03, 0x00, 0x65, 0xBA, 0x00, 0x00,
0x65, 0xB2, 0x00, 0x00, 0x42, 0x82, 0x02, 0x00, 0x00, 0x51, 0x00, 0x00, 0x61, 0xC1, 0x00, 0x00,
0x65, 0xFB, 0x00, 0x00, 0x65, 0xF3, 0x00, 0x00, 0x41, 0x87, 0x05, 0x00, 0x65, 0xF3, 0x00, 0x00,
0x42, 0xC3, 0x08, 0x00, 0x00, 0x59, 0x00, 0x00, 0x60, 0xC7, 0x00, 0x00, 0x60, 0xC7, 0x00, 0x00,
0x56, 0xC0, 0x21, 0x00, 0x04, 0xDF, 0x01, 0x00, 0x43, 0xC7, 0x15, 0x00, 0x00, 0x38, 0x00, 0x00,
0x00, 0x79, 0x00, 0x00, 0x42, 0xC3, 0x20, 0x00, 0x43, 0xC3, 0x04, 0x00, 0x42, 0x00, 0x30, 0x00,
0x42, 0x41, 0x30, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4B, 0x00, 0x00, 0x60, 0xC7, 0x01, 0x00,
0x22, 0x78, 0x01, 0x00, 0x22, 0x79, 0x03, 0x00, 0x22, 0x7F, 0x1F, 0x00, 0x6F, 0x00, 0x00, 0x00,
0x6E, 0x34, 0x02, 0x00, 0x6E, 0x05, 0x04, 0x00, 0x4B, 0x41, 0x00, 0x00, 0x60, 0xC7, 0x01, 0x00,
0x60, 0x87, 0x01, 0x00, 0x43, 0x86, 0x15, 0x00, 0x00, 0x30, 0x00, 0x00, 0x65, 0x39, 0x01, 0x00,
0x42, 0x04, 0x05, 0x00, 0x4E, 0x05, 0x7E, 0x00, 0x6A, 0x1B, 0x06, 0x00, 0x55, 0xC0, 0x3D, 0x00,
0x0A, 0x3C, 0x01, 0x00, 0x60, 0xC7, 0x01, 0x00, 0x22, 0x78, 0x01, 0x00, 0x22, 0x79, 0x03, 0x00,
0x22, 0x7C, 0x09, 0x00, 0x22, 0x7F, 0x1F, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x65, 0x7A, 0x01, 0x00,
0x42, 0x45, 0x05, 0x00, 0x65, 0xBB, 0x01, 0x00, 0x42, 0x86, 0x05, 0x00, 0x55, 0xC0, 0x3D, 0x00,
0x0A, 0x7D, 0x01, 0x00, 0x0A, 0xBE, 0x01, 0x00, 0x07, 0xC7, 0x01, 0x00, 0x0B, 0x7D, 0x01, 0x00,
0x0B, 0xBE, 0x01, 0x00, 0x55, 0xC0, 0x3D, 0x00, 0x0A, 0x3C, 0x01, 0x00, 0x60, 0xC7, 0x01, 0x00,
0x22, 0x78, 0x01, 0x00, 0x22, 0x79, 0x03, 0x00, 0x22, 0x7A, 0x05, 0x00, 0x22, 0x7B, 0x07, 0x00,
0x22, 0x7C, 0x09, 0x00, 0x22, 0x7D, 0x0B, 0x00, 0x22, 0x7E, 0x0D, 0x00, 0x22, 0x7F, 0x1F, 0x00,
0x6F, 0x00, 0x00, 0x00
};
vic_config_t __attribute__((aligned (0x100))) vic_cfg = {0};
u32 _vic_read_priv(u32 addr)
{
u32 addr_lsb = addr & 0xFF;
// Set address LSB.
if (addr_lsb)
VIC(PVIC_FALCON_ADDR) = addr_lsb >> 2;
// Set address.
u32 val = VIC(PVIC_FALCON_PA_OFFSET + (addr >> 6));
// Unset address LSB.
if (addr_lsb)
VIC(PVIC_FALCON_ADDR) = 0;
return val;
}
static void _vic_write_priv(u32 addr, u32 data)
{
u32 addr_lsb = addr & 0xFF;
// Set address LSB.
if (addr_lsb)
VIC(PVIC_FALCON_ADDR) = addr_lsb >> 2;
// Set address.
VIC(PVIC_FALCON_PA_OFFSET + (addr >> 6)) = data;
// Unset address LSB.
if (addr_lsb)
VIC(PVIC_FALCON_ADDR) = 0;
}
int vic_wait_idle()
{
u32 timeout_count = 15000; // 150ms.
while (VIC(PVIC_FALCON_IDLESTATE))
{
usleep(10);
timeout_count--;
if (!timeout_count)
return 1;
};
return 0;
}
void vic_set_surface(const vic_surface_t *sfc)
{
u32 flip_x = 0;
u32 flip_y = 0;
u32 swap_xy = 0;
u32 const_alpha = 0;
u32 width = sfc->width;
u32 height = sfc->height;
u32 pix_fmt = sfc->pix_fmt;
u32 src_buf = sfc->src_buf;
u32 dst_buf = sfc->dst_buf;
// Get format alpha type.
switch (sfc->pix_fmt)
{
case VIC_PIX_FORMAT_L8:
case VIC_PIX_FORMAT_X1B5G5R5:
case VIC_PIX_FORMAT_B5G5R5X1:
case VIC_PIX_FORMAT_X8B8G8R8:
case VIC_PIX_FORMAT_X8R8G8B8:
case VIC_PIX_FORMAT_B8G8R8X8:
case VIC_PIX_FORMAT_R8G8B8X8:
const_alpha = 1;
break;
case VIC_PIX_FORMAT_A8B8G8R8:
case VIC_PIX_FORMAT_A8R8G8B8:
case VIC_PIX_FORMAT_B8G8R8A8:
case VIC_PIX_FORMAT_R8G8B8A8:
default:
break;
}
// Get rotation parameters.
switch (sfc->rotation)
{
case VIC_ROTATION_90:
swap_xy = 1;
break;
case VIC_ROTATION_180:
flip_x = 1;
flip_y = 1;
break;
case VIC_ROTATION_270:
flip_x = 1;
swap_xy = 1;
break;
case VIC_ROTATION_0:
default:
break;
}
// Set output surface format.
vic_cfg.out_sfc_cfg.OutPixelFormat = pix_fmt;
vic_cfg.out_sfc_cfg.OutBlkKind = BLK_KIND_PITCH;
vic_cfg.out_sfc_cfg.OutBlkHeight = 0;
// Set output rotation/flip.
vic_cfg.out_cfg.OutputFlipX = flip_x;
vic_cfg.out_cfg.OutputFlipY = flip_y;
vic_cfg.out_cfg.OutputTranspose = swap_xy;
// Set output surface resolution.
vic_cfg.out_sfc_cfg.OutSurfaceWidth = width - 1;
vic_cfg.out_sfc_cfg.OutSurfaceHeight = height - 1;
vic_cfg.out_sfc_cfg.OutLumaWidth = width - 1;
vic_cfg.out_sfc_cfg.OutLumaHeight = height - 1;
// Set output destination rectangle. Anything outside will not be touched at output buffer.
vic_cfg.out_cfg.TargetRectLeft = 0;
vic_cfg.out_cfg.TargetRectRight = width - 1;
vic_cfg.out_cfg.TargetRectTop = 0;
vic_cfg.out_cfg.TargetRectBottom = height - 1;
// Initialize slot parameters.
vic_cfg.slots[0].slot_cfg.SlotEnable = 1;
vic_cfg.slots[0].slot_cfg.SoftClampLow = SOFT_CLAMP_MIN;
vic_cfg.slots[0].slot_cfg.SoftClampHigh = SOFT_CLAMP_MAX;
vic_cfg.slots[0].slot_cfg.PlanarAlpha = ALPHA_1_0;
vic_cfg.slots[0].slot_cfg.ConstantAlpha = const_alpha;
vic_cfg.slots[0].slot_cfg.FrameFormat = FORMAT_PROGRESSIVE;
// Set input source rectangle.
vic_cfg.slots[0].slot_cfg.SourceRectLeft = 0;
vic_cfg.slots[0].slot_cfg.SourceRectRight = (width - 1) << 16;
vic_cfg.slots[0].slot_cfg.SourceRectTop = 0;
vic_cfg.slots[0].slot_cfg.SourceRectBottom = (height - 1) << 16;
// Set input destination rectangle.
vic_cfg.slots[0].slot_cfg.DestRectLeft = 0;
vic_cfg.slots[0].slot_cfg.DestRectRight = (width - 1);
vic_cfg.slots[0].slot_cfg.DestRectTop = 0;
vic_cfg.slots[0].slot_cfg.DestRectBottom = (height - 1);
// Set input surface format.
vic_cfg.slots[0].slot_sfc_cfg.SlotPixelFormat = pix_fmt;
vic_cfg.slots[0].slot_sfc_cfg.SlotBlkKind = BLK_KIND_PITCH;
vic_cfg.slots[0].slot_sfc_cfg.SlotBlkHeight = 0;
vic_cfg.slots[0].slot_sfc_cfg.SlotCacheWidth = CACHE_WIDTH_64BX4;
// Set input surface resolution.
vic_cfg.slots[0].slot_sfc_cfg.SlotSurfaceWidth = width - 1;
vic_cfg.slots[0].slot_sfc_cfg.SlotSurfaceHeight = height - 1;
vic_cfg.slots[0].slot_sfc_cfg.SlotLumaWidth = width - 1;
vic_cfg.slots[0].slot_sfc_cfg.SlotLumaHeight = height - 1;
// Flush data.
bpmp_mmu_maintenance(BPMP_MMU_MAINT_CLEAN_WAY, false);
// Set parameters base and size. Causes a parse by surface cache.
_vic_write_priv(VIC_SC_PRAMBASE, (u32)&vic_cfg >> 8);
_vic_write_priv(VIC_SC_PRAMSIZE, sizeof(vic_config_t) >> 6);
// Wait for surface cache to get ready.
vic_wait_idle();
// Set slot mapping.
_vic_write_priv(VIC_FC_SLOT_MAP, 0xFFFFFFF0);
// Set input surface buffer.
_vic_write_priv(VIC_SC_SFC0_BASE_LUMA(0), src_buf >> 8);
// Set output surface buffer.
_vic_write_priv(VIC_BL_TARGET_BASADR, dst_buf >> 8);
// Set blending config and push changes to surface cache.
_vic_write_priv(VIC_BL_CONFIG, SLOTMASK(0x1F) | PROCESS_CFG_STRUCT_TRIGGER | SUBPARTITION_MODE);
// Wait for surface cache to get ready.
vic_wait_idle();
}
int vic_compose()
{
// Wait for surface cache to get ready. Otherwise VIC will hang.
int res = vic_wait_idle();
// Start composition of a single frame.
_vic_write_priv(VIC_FC_COMPOSE, COMPOSE_START);
return res;
}
int vic_init()
{
clock_enable_vic();
// Load Fetch Control Engine microcode.
for (u32 i = 0; i < sizeof(vic_fce_ucode) / sizeof(u32); i++)
{
_vic_write_priv(VIC_FC_FCE_UCODE_ADDR, (i * sizeof(u32)));
_vic_write_priv(VIC_FC_FCE_UCODE_INST, *(u32 *)&vic_fce_ucode[i * sizeof(u32)]);
}
// Start Fetch Control Engine.
_vic_write_priv(VIC_FC_FCE_CTRL, START_TRIGGER);
return vic_wait_idle();
}
void vic_end()
{
clock_disable_vic();
}
================================================
FILE: bdk/display/vic.h
================================================
/*
* VIC driver for Tegra X1
*
* Copyright (c) 2018-2019 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _VIC_H_
#define _VIC_H_
#include <utils/types.h>
#define VIC_THI_SLCG_OVERRIDE_LOW_A 0x8C
typedef enum _vic_rotation_t
{
VIC_ROTATION_0 = 0,
VIC_ROTATION_90 = 1,
VIC_ROTATION_180 = 2,
VIC_ROTATION_270 = 3,
} vic_rotation_t;
typedef enum _vic_pix_format_t
{
VIC_PIX_FORMAT_L8 = 1, // 8-bit LUT.
VIC_PIX_FORMAT_X1B5G5R5 = 21, // 16-bit XBGR.
VIC_PIX_FORMAT_B5G5R5X1 = 23, // 16-bit BGRX.
VIC_PIX_FORMAT_A8B8G8R8 = 31, // 32-bit ABGR.
VIC_PIX_FORMAT_A8R8G8B8 = 32, // 32-bit ARGB.
VIC_PIX_FORMAT_B8G8R8A8 = 33, // 32-bit BGRA.
VIC_PIX_FORMAT_R8G8B8A8 = 34, // 32-bit RGBA.
VIC_PIX_FORMAT_X8B8G8R8 = 35, // 32-bit XBGR.
VIC_PIX_FORMAT_X8R8G8B8 = 36, // 32-bit XRGB.
VIC_PIX_FORMAT_B8G8R8X8 = 37, // 32-bit BGRX.
VIC_PIX_FORMAT_R8G8B8X8 = 38, // 32-bit RGBX.
} vic_pix_format_t;
typedef struct _vic_surface_t
{
u32 src_buf;
u32 dst_buf;
u32 width;
u32 height;
u32 pix_fmt;
u32 rotation;
} vic_surface_t;
void vic_set_surface(const vic_surface_t *sfc);
int vic_wait_idle();
int vic_compose();
int vic_init();
void vic_end();
#endif
================================================
FILE: bdk/exception_handlers.S
================================================
/*
* Copyright (c) 2019 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Armv7tdmi Status register.
*
* bit0: Mode 0.
* bit1: Mode 1.
* bit2: Mode 2.
* bit3: Mode 3.
* bit4: Mode 4.
* bit5: Thumb state.
* bit6: FIQ disable.
* bit7: IRQ disable.
* bit8-27: Reserved.
* bit28: Overflow condition.
* bit29: Carry/Borrow/Extend condition.
* bit30: Zero condition.
* bit31: Negative/Less than condition.
*
* M[4:0] | Mode | Visible Thumb-state registers | Visible ARM-state registers
* 10000 | USER | r0–r7, SP, LR, PC, CPSR | r0–r14, PC, CPSR
* 10001 | FIQ | r0–r7, SP_fiq, LR_fiq, PC, CPSR, SPSR_fiq | r0–r7, r8_fiq–r14_fiq, PC, CPSR, SPSR_fiq
* 10010 | IRQ | r0–r7, SP_irq, LR_irq, PC, CPSR, SPSR_irq | r0–r12, r13_irq, r14_irq, PC, CPSR, SPSR_irq
* 10011 | SVC | r0–r7, SP_svc, LR_svc, PC, CPSR, SPSR_svc | r0–r12, r13_svc, r14_svc, PC, CPSR, SPSR_svc
* 10111 | ABRT | r0–r7, SP_abt, LR_abt, PC, CPSR, SPSR_abt | r0–r12, r13_abt, r14_abt, PC, CPSR, SPSR_abt
* 11011 | UNDF | r0–r7, SP_und, LR_und, PC, CPSR, SPSR_und | r0–r12, r13_und, r14_und, PC, CPSR, SPSR_und
* 11111 | SYS | r0–r7, SP, LR, PC, CPSR | r0–r14, PC, CPSR
*/
#define EXCP_EN_ADDR 0x4003FF1C
#define EXCP_TYPE_ADDR 0x4003FF18
#define EXCP_LR_ADDR 0x4003FF14
#define EXCP_VEC_BASE 0x6000F000
#define EVP_COP_RESET_VECTOR 0x200
#define EVP_COP_UNDEF_VECTOR 0x204
#define EVP_COP_SWI_VECTOR 0x208
#define EVP_COP_PREFETCH_ABORT_VECTOR 0x20C
#define EVP_COP_DATA_ABORT_VECTOR 0x210
#define EVP_COP_RSVD_VECTOR 0x214
#define EVP_COP_IRQ_VECTOR 0x218
#define EVP_COP_FIQ_VECTOR 0x21C
#define MODE_USR 0x10
#define MODE_FIQ 0x11
#define MODE_IRQ 0x12
#define MODE_SVC 0x13
#define MODE_ABT 0x17
#define MODE_UDF 0x1B
#define MODE_SYS 0x1F
#define MODE_MASK 0x1F
#define FIQ 0x40
#define IRQ 0x80
.section .text._irq_setup
.arm
.extern ipl_main
.type ipl_main, %function
.extern svc_handler
.type svc_handler, %function
.extern irq_handler
.type irq_handler, %function
.extern fiq_setup
.type fiq_setup, %function
.extern fiq_handler
.type fiq_handler, %function
.globl _irq_setup
.type _irq_setup, %function
_irq_setup:
MRS R0, CPSR
BIC R0, R0, #MODE_MASK /* Clear mode bits */
ORR R0, R0, #(MODE_SVC | IRQ | FIQ) /* SUPERVISOR mode, IRQ/FIQ disabled */
MSR CPSR, R0
/* Setup IRQ stack pointer */
MSR CPSR, #(MODE_IRQ | IRQ | FIQ) /* IRQ mode, IRQ/FIQ disabled */
LDR SP, =0x40040000
/* Setup FIQ stack pointer */
MSR CPSR, #(MODE_FIQ | IRQ | FIQ) /* FIQ mode, IRQ/FIQ disabled */
LDR SP, =0x40040000
/* Setup SYS stack pointer */
MSR CPSR, #(MODE_SYS | IRQ | FIQ) /* SYSTEM mode, IRQ/FIQ disabled */
LDR SP, =0x4003FF00 /* Will be changed later to DRAM */
MOV LR, PC
BL setup_vectors
/*BL fiq_setup*/
/* Enable interrupts */
BL irq_enable_cpu_irq_exceptions
B ipl_main
B .
.globl excp_reset
.type excp_reset, %function
excp_reset:
LDR R0, =EXCP_EN_ADDR
LDR R1, =0x30505645 /* EVP0 */
STR R1, [R0] /* EVP0 in EXCP_EN_ADDR */
LDR R0, =EXCP_LR_ADDR
MOV R1, LR
STR R1, [R0] /* Save LR in EXCP_LR_ADDR */
LDR R0, =__bss_start
EOR R1, R1, R1
LDR R2, =__bss_end
SUB R2, R2, R0
BL memset
B _irq_setup
_reset_handler:
LDR R0, =EXCP_TYPE_ADDR
LDR R1, =0x545352 /* RST */
STR R1, [R0] /* RST in EXCP_TYPE_ADDR */
B excp_reset
_undefined_handler:
LDR R0, =EXCP_TYPE_ADDR
LDR R1, =0x464455 /* UDF */
STR R1, [R0] /* UDF in EXCP_TYPE_ADDR */
B excp_reset
_prefetch_abort_handler:
LDR R0, =EXCP_TYPE_ADDR
LDR R1, =0x54424150 /* PABT */
STR R1, [R0] /* PABT in EXCP_TYPE_ADDR */
B excp_reset
_data_abort_handler:
LDR R0, =EXCP_TYPE_ADDR
LDR R1, =0x54424144 /* DABT */
STR R1, [R0] /* DABT in EXCP_TYPE_ADDR */
B excp_reset
.globl irq_enable_cpu_irq_exceptions
.type irq_enable_cpu_irq_exceptions, %function
irq_enable_cpu_irq_exceptions:
MRS R12, CPSR
BIC R12, R12, #(IRQ | FIQ) /* IRQ/FIQ enabled */
MSR CPSR, R12
BX LR
.globl irq_disable_cpu_irq_exceptions
.type irq_disable_cpu_irq_exceptions, %function
irq_disable_cpu_irq_exceptions:
MRS R12, CPSR
ORR R12, R12, #(IRQ | FIQ) /* IRQ/FIQ disabled */
MSR CPSR, R12
BX LR
_irq_handler:
MOV R13, R0 /* Save R0 in R13_IRQ */
SUB R0, LR, #4 /* Put return address in R0_SYS */
MOV LR, R1 /* Save R1 in R14_IRQ (LR) */
MRS R1, SPSR /* Put the SPSR in R1_SYS */
MSR CPSR_c, #(MODE_SYS | IRQ) /* SYSTEM mode, IRQ disabled */
STMFD SP!, {R0, R1} /* SPSR and PC */
STMFD SP!, {R2-R3, R12, LR} /* AAPCS-clobbered registers */
MOV R0, SP /* Make SP_SYS visible to IRQ mode */
SUB SP, SP, #8 /* Make room for stacking R0 and R1 */
MSR CPSR_c, #(MODE_IRQ | IRQ) /* IRQ mode, IRQ disabled */
STMFD R0!, {R13, R14} /* Finish saving the context (R0, R1) */
MSR CPSR_c, #(MODE_SYS | IRQ) /* SYSTEM mode, IRQ disabled */
LDR R12, =irq_handler
MOV LR, PC /* Copy the return address to link register */
BX R12 /* Call the C IRQ handler (ARM/THUMB) */
MSR CPSR_c, #(MODE_SYS | IRQ | FIQ) /* SYSTEM mode, IRQ/FIQ disabled */
MOV R0, SP /* Make SP_SYS visible to IRQ mode */
ADD SP, SP, #32 /* Fake unstacking 8 registers from SP_SYS */
MSR CPSR_c, #(MODE_IRQ | IRQ | FIQ) /* IRQ mode, IRQ/FIQ disabled */
MOV SP, R0 /* Copy SP_SYS to SP_IRQ */
LDR R0, [SP, #28] /* Load the saved SPSR from the stack */
MSR SPSR_cxsf, R0 /* Copy it into SPSR_IRQ */
LDMFD SP, {R0-R3, R12, LR}^ /* Unstack all saved USER/SYSTEM registers */
NOP /* Cant access barked registers immediately */
LDR LR, [SP, #24] /* Load return address from the SYS stack */
MOVS PC, LR /* Return restoring CPSR from SPSR */
_fiq_handler:
BL fiq_handler
setup_vectors:
/* Setup vectors */
LDR R0, =EXCP_VEC_BASE
LDR R1, =_reset_handler
STR R1, [R0, #EVP_COP_RESET_VECTOR]
LDR R1, =_undefined_handler
STR R1, [R0, #EVP_COP_UNDEF_VECTOR]
LDR R1, =_reset_handler
STR R1, [R0, #EVP_COP_SWI_VECTOR]
LDR R1, =_prefetch_abort_handler
STR R1, [R0, #EVP_COP_PREFETCH_ABORT_VECTOR]
LDR R1, =_data_abort_handler
STR R1, [R0, #EVP_COP_DATA_ABORT_VECTOR]
LDR R1, =_reset_handler
STR R1, [R0, #EVP_COP_RSVD_VECTOR]
LDR R1, =_irq_handler
STR R1, [R0, #EVP_COP_IRQ_VECTOR]
LDR R1, =_fiq_handler
STR R1, [R0, #EVP_COP_FIQ_VECTOR]
BX LR
================================================
FILE: bdk/fatfs_cfg.h
================================================
/*
* Copyright (c) 2020 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _FATFS_CFG_H_
#define _FATFS_CFG_H_
// define FFCFG_INC in a project to use a specific FatFS configuration.
// Example: FFCFG_INC := '"../$(PROJECT_DIR)/libs/fatfs/ffconf.h"'
#ifdef FFCFG_INC
#include FFCFG_INC
#else
#include "fatfs_conf.h"
#endif
#endif
================================================
FILE: bdk/fatfs_conf.h
================================================
/*---------------------------------------------------------------------------/
/ FatFs Functional Configurations
/---------------------------------------------------------------------------*/
#define FFCONF_DEF 86604 /* Revision ID */
/*---------------------------------------------------------------------------/
/ Function Configurations
/---------------------------------------------------------------------------*/
#define FF_FS_READONLY 0
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
/ and optional writing functions as well. */
#define FF_FS_MINIMIZE 0
/* This option defines minimization level to remove some basic API functions.
/
/ 0: Basic functions are fully enabled.
/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
/ are removed.
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
/ 3: f_lseek() function is removed in addition to 2. */
#define FF_USE_STRFUNC 2
/* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf().
/
/ 0: Disable string functions.
/ 1: Enable without LF-CRLF conversion.
/ 2: Enable with LF-CRLF conversion. */
#define FF_USE_FIND 1
/* This option switches filtered directory read functions, f_findfirst() and
/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
#define FF_USE_MKFS 0
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
#if FF_USE_MKFS
#define FF_MKFS_LABEL "SWITCH SD "
#endif
/* This sets FAT/FAT32 label. Exactly 11 characters, all caps. */
#define FF_USE_FASTSEEK 0
/* This option switches fast seek function. (0:Disable or 1:Enable) */
#define FF_FASTFS 0
#if FF_FASTFS
#undef FF_USE_FASTSEEK
#define FF_USE_FASTSEEK 1
#endif
/* This option switches fast access to chained clusters. (0:Disable or 1:Enable) */
#define FF_SIMPLE_GPT 1
/* This option switches support for the first GPT partition. (0:Disable or 1:Enable) */
#define FF_USE_EXPAND 0
/* This option switches f_expand function. (0:Disable or 1:Enable) */
#define FF_USE_CHMOD 1
/* This option switches attribute manipulation functions, f_chmod() and f_utime().
/ (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */
#define FF_USE_LABEL 0
/* This option switches volume label functions, f_getlabel() and f_setlabel().
/ (0:Disable or 1:Enable) */
#define FF_USE_FORWARD 0
/* This option switches f_forward() function. (0:Disable or 1:Enable) */
/*---------------------------------------------------------------------------/
/ Locale and Namespace Configurations
/---------------------------------------------------------------------------*/
#define FF_CODE_PAGE 850
/* This option specifies the OEM code page to be used on the target system.
/ Incorrect code page setting can cause a file open failure.
/
/ 437 - U.S.
/ 720 - Arabic
/ 737 - Greek
/ 771 - KBL
/ 775 - Baltic
/ 850 - Latin 1
/ 852 - Latin 2
/ 855 - Cyrillic
/ 857 - Turkish
/ 860 - Portuguese
/ 861 - Icelandic
/ 862 - Hebrew
/ 863 - Canadian French
/ 864 - Arabic
/ 865 - Nordic
/ 866 - Russian
/ 869 - Greek 2
/ 932 - Japanese (DBCS)
/ 936 - Simplified Chinese (DBCS)
/ 949 - Korean (DBCS)
/ 950 - Traditional Chinese (DBCS)
/ 0 - Include all code pages above and configured by f_setcp()
*/
#define FF_USE_LFN 3
#define FF_MAX_LFN 255
/* The FF_USE_LFN switches the support for LFN (long file name).
/
/ 0: Disable LFN. FF_MAX_LFN has no effect.
/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
/ 2: Enable LFN with dynamic working buffer on the STACK.
/ 3: Enable LFN with dynamic working buffer on the HEAP.
/
/ To enable the LFN, ffunicode.c needs to be added to the project. The LFN function
/ requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and
/ additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled.
/ The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can
/ be in range of 12 to 255. It is recommended to be set 255 to fully support LFN
/ specification.
/ When use stack for the working buffer, take care on stack overflow. When use heap
/ memory for the working buffer, memory management functions, ff_memalloc() and
/ ff_memfree() in ffsystem.c, need to be added to the project. */
#define FF_LFN_UNICODE 0
/* This option switches the character encoding on the API when LFN is enabled.
/
/ 0: ANSI/OEM in current CP (TCHAR = char)
/ 1: Unicode in UTF-16 (TCHAR = WCHAR)
/ 2: Unicode in UTF-8 (TCHAR = char)
/ 3: Unicode in UTF-32 (TCHAR = DWORD)
/
/ Also behavior of string I/O functions will be affected by this option.
/ When LFN is not enabled, this option has no effect. */
#define FF_LFN_BUF 255
#define FF_SFN_BUF 12
/* This set of options defines size of file name members in the FILINFO structure
/ which is used to read out directory items. These values should be suffcient for
/ the file names to read. The maximum possible length of the read file name depends
/ on character encoding. When LFN is not enabled, these options have no effect. */
#define FF_STRF_ENCODE 0
/* When FF_LFN_UNICODE >= 1 with LFN enabled, string I/O functions, f_gets(),
/ f_putc(), f_puts and f_printf() convert the character encoding in it.
/ This option selects assumption of character encoding ON THE FILE to be
/ read/written via those functions.
/
/ 0: ANSI/OEM in current CP
/ 1: Unicode in UTF-16LE
/ 2: Unicode in UTF-16BE
/ 3: Unicode in UTF-8
*/
#define FF_FS_RPATH 0
/* This option configures support for relative path.
/
/ 0: Disable relative path and remove related functions.
/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
/ 2: f_getcwd() function is available in addition to 1.
*/
/*---------------------------------------------------------------------------/
/ Drive/Volume Configurations
/---------------------------------------------------------------------------*/
#define FF_VOLUMES 1
/* Number of volumes (logical drives) to be used. (1-10) */
#define FF_STR_VOLUME_ID 0
#define FF_VOLUME_STRS "sd"
/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings.
/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive
/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each
/ logical drives. Number of items must not be less than FF_VOLUMES. Valid
/ characters for the volume ID strings are A-Z, a-z and 0-9, however, they are
/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is
/ not defined, a user defined volume string table needs to be defined as:
/
/ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",...
/ Order is important. Any change to order, must also be reflected to diskio drive enum.
*/
#define FF_MULTI_PARTITION 0
/* This option switches support for multiple volumes on the physical drive.
/ By default (0), each logical drive number is bound to the same physical drive
/ number and only an FAT volume found on the physical drive will be mounted.
/ When this function is enabled (1), each logical drive number can be bound to
/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
/ funciton will be available. */
#define FF_MIN_SS 512
#define FF_MAX_SS 512
/* This set of options configures the range of sector size to be supported. (512,
/ 1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and
/ harddisk. But a larger value may be required for on-board flash memory and some
/ type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured
/ for variable sector size mode and disk_ioctl() function needs to implement
/ GET_SECTOR_SIZE command. */
#define FF_USE_TRIM 0
/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
/ To enable Trim function, also CTRL_TRIM command should be implemented to the
/ disk_ioctl() function. */
#define FF_FS_NOFSINFO 1
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
/ option, and f_getfree() function at first time after volume mount will force
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
/
/ bit0=0: Use free cluster count in the FSINFO if available.
/ bit0=1: Do not trust free cluster count in the FSINFO.
/ bit1=0: Use last allocated cluster number in the FSINFO if available.
/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
*/
/*---------------------------------------------------------------------------/
/ System Configurations
/---------------------------------------------------------------------------*/
#define FF_FS_TINY 0
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
/ At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes.
/ Instead of private sector buffer eliminated from the file object, common sector
/ buffer in the filesystem object (FATFS) is used for the file data transfer. */
#define FF_FS_EXFAT 1
/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable)
/ To enable exFAT, also LFN needs to be enabled. (FF_USE_LFN >= 1)
/ Note that enabling exFAT discards ANSI C (C89) compatibility. */
#define FF_FS_NORTC 1
#define FF_NORTC_MON 1
#define FF_NORTC_MDAY 1
#define FF_NORTC_YEAR 2022
/* The option FF_FS_NORTC switches timestamp function. If the system does not have
/ any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable
/ the timestamp function. Every object modified by FatFs will have a fixed timestamp
/ defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time.
/ To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be
/ added to the project to read current time form real-time clock. FF_NORTC_MON,
/ FF_NORTC_MDAY and FF_NORTC_YEAR have no effect.
/ These options have no effect at read-only configuration (FF_FS_READONLY = 1). */
#define FF_FS_LOCK 0
/* The option FF_FS_LOCK switches file lock function to control duplicated file open
/ and illegal operation to open objects. This option must be 0 when FF_FS_READONLY
/ is 1.
/
/ 0: Disable file lock function. To avoid volume corruption, application program
/ should avoid illegal open, remove and rename to the open objects.
/ >0: Enable file lock function. The value defines how many files/sub-directories
/ can be opened simultaneously under file lock control. Note that the file
/ lock control is independent of re-entrancy. */
/* #include <somertos.h> // O/S definitions */
#define FF_FS_REENTRANT 0
#define FF_FS_TIMEOUT 1000
#define FF_SYNC_t HANDLE
/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
/ module itself. Note that regardless of this option, file access to different
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
/ and f_fdisk() function, are always not re-entrant. Only file/directory access
/ to the same volume is under control of this function.
/
/ 0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect.
/ 1: Enable re-entrancy. Also user provided synchronization handlers,
/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
/ function, must be added to the project. Samples are available in
/ option/syscall.c.
/
/ The FF_FS_TIMEOUT defines timeout period in unit of time tick.
/ The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be
/ included somewhere in the scope of ff.h. */
/*--- End of configuration options ---*/
================================================
FILE: bdk/gfx_utils.h
================================================
/*
* Copyright (c) 2020 CTCaer
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _GFX_UTILS_H_
#define _GFX_UTILS_H_
#ifdef GFX_INC
#include GFX_INC
#endif
#endif
================================================
FILE: bdk/ianos/elfload/elf.h
================================================
/* $OpenBSD: exec_elf.h,v 1.53 2014/01/03 03:00:39 guenther Exp $ */
/*
* Copyright (c) 1995, 1996 Erik Theisen. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* imported sys/exec_elf.h from OpenBSD */
#ifndef ELF_H
#define ELF_H
#include <utils/types.h>
typedef u8 Elf_Byte;
typedef u32 Elf32_Addr; /* Unsigned program address */
typedef u32 Elf32_Off; /* Unsigned file offset */
typedef s32 Elf32_Sword; /* Signed large integer */
typedef u32 Elf32_Word; /* Unsigned large integer */
typedef u16 Elf32_Half; /* Unsigned medium integer */
typedef u64 Elf64_Addr;
typedef u64 Elf64_Off;
typedef s32 Elf64_Shalf;
#ifdef __alpha__
typedef s64 Elf64_Sword;
typedef u64 Elf64_Word;
#else
typedef s32 Elf64_Sword;
typedef u32 Elf64_Word;
#endif
typedef s64 Elf64_Sxword;
typedef u64 Elf64_Xword;
typedef u32 Elf64_Half;
typedef u16 Elf64_Quarter;
/*
* e_ident[] identification indexes
* See http://www.sco.com/developers/gabi/latest/ch4.eheader.html
*/
#define EI_MAG0 0 /* file ID */
#define EI_MAG1 1 /* file ID */
#define EI_MAG2 2 /* file ID */
#define EI_MAG3 3 /* file ID */
#define EI_CLASS 4 /* file class */
#define EI_DATA 5 /* data encoding */
#define EI_VERSION 6 /* ELF header version */
#define EI_OSABI 7 /* OS/ABI ID */
#define EI_ABIVERSION 8 /* ABI version */
#define EI_PAD 9 /* start of pad bytes */
#define EI_NIDENT 16 /* Size of e_ident[] */
/* e_ident[] magic number */
#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */
#define ELFMAG1 'E' /* e_ident[EI_MAG1] */
#define ELFMAG2 'L' /* e_ident[EI_MAG2] */
#define ELFMAG3 'F' /* e_ident[EI_MAG3] */
#define ELFMAG "\177ELF" /* magic */
#define SELFMAG 4 /* size of magic */
/* e_ident[] file class */
#define ELFCLASSNONE 0 /* invalid */
#define ELFCLASS32 1 /* 32-bit objs */
#define ELFCLASS64 2 /* 64-bit objs */
#define ELFCLASSNUM 3 /* number of classes */
/* e_ident[] data encoding */
#define ELFDATANONE 0 /* invalid */
#define ELFDATA2LSB 1 /* Little-Endian */
#define ELFDATA2MSB 2 /* Big-Endian */
#define ELFDATANUM 3 /* number of data encode defines */
/* e_ident[] Operating System/ABI */
#define ELFOSABI_SYSV 0 /* UNIX System V ABI */
#define ELFOSABI_HPUX 1 /* HP-UX operating system */
#define ELFOSABI_NETBSD 2 /* NetBSD */
#define ELFOSABI_LINUX 3 /* GNU/Linux */
#define ELFOSABI_HURD 4 /* GNU/Hurd */
#define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */
#define ELFOSABI_SOLARIS 6 /* Solaris */
#define ELFOSABI_MONTEREY 7 /* Monterey */
#define ELFOSABI_IRIX 8 /* IRIX */
#define ELFOSABI_FREEBSD 9 /* FreeBSD */
#define ELFOSABI_TRU64 10 /* TRU64 UNIX */
#define ELFOSABI_MODESTO 11 /* Novell Modesto */
#define ELFOSABI_OPENBSD 12 /* OpenBSD */
#define ELFOSABI_ARM 97 /* ARM */
#define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */
/* e_ident */
#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \
(ehdr).e_ident[EI_MAG1] == ELFMAG1 && \
(ehdr).e_ident[EI_MAG2] == ELFMAG2 && \
(ehdr).e_ident[EI_MAG3] == ELFMAG3)
/* ELF Header */
typedef struct
{
unsigned char e_ident[EI_NIDENT]; /* ELF Identification */
Elf32_Half e_type; /* object file type */
Elf32_Half e_machine; /* machine */
Elf32_Word e_version; /* object file version */
Elf32_Addr e_entry; /* virtual entry point */
Elf32_Off e_phoff; /* program header table offset */
Elf32_Off e_shoff; /* section header table offset */
Elf32_Word e_flags; /* processor-specific flags */
Elf32_Half e_ehsize; /* ELF header size */
Elf32_Half e_phentsize; /* program header entry size */
Elf32_Half e_phnum; /* number of program header entries */
Elf32_Half e_shentsize; /* section header entry size */
Elf32_Half e_shnum; /* number of section header entries */
Elf32_Half e_shstrndx; /* section header table's "section
header string table" entry offset */
} Elf32_Ehdr;
typedef struct
{
unsigned char e_ident[EI_NIDENT]; /* Id bytes */
Elf64_Quarter e_type; /* file type */
Elf64_Quarter e_machine; /* machine type */
Elf64_Half e_version; /* version number */
Elf64_Addr e_entry; /* entry point */
Elf64_Off e_phoff; /* Program hdr offset */
Elf64_Off e_shoff; /* Section hdr offset */
Elf64_Half e_flags; /* Processor flags */
Elf64_Quarter e_ehsize; /* sizeof ehdr */
Elf64_Quarter e_phentsize; /* Program header entry size */
Elf64_Quarter e_phnum; /* Number of program headers */
Elf64_Quarter e_shentsize; /* Section header entry size */
Elf64_Quarter e_shnum; /* Number of section headers */
Elf64_Quarter e_shstrndx; /* String table index */
} Elf64_Ehdr;
/* e_type */
#define ET_NONE 0 /* No file type */
#define ET_REL 1 /* relocatable file */
#define ET_EXEC 2 /* executable file */
#define ET_DYN 3 /* shared object file */
#define ET_CORE 4 /* core file */
#define ET_NUM 5 /* number of types */
#define ET_LOPROC 0xff00 /* reserved range for processor */
#define ET_HIPROC 0xffff /* specific e_type */
/* e_machine */
#define EM_NONE 0 /* No Machine */
#define EM_M32 1 /* AT&T WE 32100 */
#define EM_SPARC 2 /* SPARC */
#define EM_386 3 /* Intel 80386 */
#define EM_68K 4 /* Motorola 68000 */
#define EM_88K 5 /* Motorola 88000 */
#define EM_486 6 /* Intel 80486 - unused? */
#define EM_860 7 /* Intel 80860 */
#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */
/*
* Don't know if EM_MIPS_RS4_BE,
* EM_SPARC64, EM_PARISC,
* or EM_PPC are ABI compliant
*/
#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */
#define EM_SPARC64 11 /* SPARC v9 64-bit unofficial */
#define EM_PARISC 15 /* HPPA */
#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */
#define EM_PPC 20 /* PowerPC */
#define EM_ARM 40 /* ARM AArch32 */
#define EM_ALPHA 41 /* DEC ALPHA */
#define EM_SH 42 /* Hitachi/Renesas Super-H */
#define EM_SPARCV9 43 /* SPARC version 9 */
#define EM_IA_64 50 /* Intel IA-64 Processor */
#define EM_AMD64 62 /* AMD64 architecture */
#define EM_VAX 75 /* DEC VAX */
#define EM_AARCH64 183 /* ARM AArch64 */
/* Non-standard */
#define EM_ALPHA_EXP 0x9026 /* DEC ALPHA */
/* Version */
#define EV_NONE 0 /* Invalid */
#define EV_CURRENT 1 /* Current */
#define EV_NUM 2 /* number of versions */
/* Section Header */
typedef struct
{
Elf32_Word sh_name; /* name - index into section header
* string table section */
Elf32_Word sh_type; /* type */
Elf32_Word sh_flags; /* flags */
Elf32_Addr sh_addr; /* address */
Elf32_Off sh_offset; /* file offset */
Elf32_Word sh_size; /* section size */
Elf32_Word sh_link; /* section header table index link */
Elf32_Word sh_info; /* extra information */
Elf32_Word sh_addralign; /* address alignment */
Elf32_Word sh_entsize; /* section entry size */
} Elf32_Shdr;
typedef struct
{
Elf64_Half sh_name; /* section name */
Elf64_Half sh_type; /* section type */
Elf64_Xword sh_flags; /* section flags */
Elf64_Addr sh_addr; /* virtual address */
Elf64_Off sh_offset; /* file offset */
Elf64_Xword sh_size; /* section size */
Elf64_Half sh_link; /* link to another */
Elf64_Half sh_info; /* misc info */
Elf64_Xword sh_addralign; /* memory alignment */
Elf64_Xword sh_entsize; /* table entry size */
} Elf64_Shdr;
/* Special Section Indexes */
#define SHN_UNDEF 0 /* undefined */
#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */
#define SHN_LOPROC 0xff00 /* reserved range for processor */
#define SHN_HIPROC 0xff1f /* specific section indexes */
#define SHN_ABS 0xfff1 /* absolute value */
#define SHN_COMMON 0xfff2 /* common symbol */
#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */
/* sh_type */
#define SHT_NULL 0 /* inactive */
#define SHT_PROGBITS 1 /* program defined information */
#define SHT_SYMTAB 2 /* symbol table section */
#define SHT_STRTAB 3 /* string table section */
#define SHT_RELA 4 /* relocation section with addends*/
#define SHT_HASH 5 /* symbol hash table section */
#define SHT_DYNAMIC 6 /* dynamic section */
#define SHT_NOTE 7 /* note section */
#define SHT_NOBITS 8 /* no space section */
#define SHT_REL 9 /* relation section without addends */
#define SHT_SHLIB 10 /* reserved - purpose unknown */
#define SHT_DYNSYM 11 /* dynamic symbol table section */
#define SHT_NUM 12 /* number of section types */
#define SHT_LOPROC 0x70000000 /* reserved range for processor */
#define SHT_HIPROC 0x7fffffff /* specific section header types */
#define SHT_LOUSER 0x80000000 /* reserved range for application */
#define SHT_HIUSER 0xffffffff /* specific indexes */
/* Section names */
#define ELF_BSS ".bss" /* uninitialized data */
#define ELF_DATA ".data" /* initialized data */
#define ELF_DEBUG ".debug" /* debug */
#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */
#define ELF_DYNSTR ".dynstr" /* dynamic string table */
#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */
#define ELF_FINI ".fini" /* termination code */
#define ELF_GOT ".got" /* global offset table */
#define ELF_HASH ".hash" /* symbol hash table */
#define ELF_INIT ".init" /* initialization code */
#define ELF_REL_DATA ".rel.data" /* relocation data */
#define ELF_REL_FINI ".rel.fini" /* relocation termination code */
#define ELF_REL_INIT ".rel.init" /* relocation initialization code */
#define ELF_REL_DYN ".rel.dyn" /* relocation dynamic link info */
#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */
#define ELF_REL_TEXT ".rel.text" /* relocation code */
#define ELF_RODATA ".rodata" /* read-only data */
#define ELF_SHSTRTAB ".shstrtab" /* section header string table */
#define ELF_STRTAB ".strtab" /* string table */
#define ELF_SYMTAB ".symtab" /* symbol table */
#define ELF_TEXT ".text" /* code */
/* Section Attribute Flags - sh_flags */
#define SHF_WRITE 0x1 /* Writable */
#define SHF_ALLOC 0x2 /* occupies memory */
#define SHF_EXECINSTR 0x4 /* executable */
#define SHF_TLS 0x400 /* thread local storage */
#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor \
* specific section attributes */
/* Symbol Table Entry */
typedef struct elf32_sym
{
Elf32_Word st_name; /* name - index into string table */
Elf32_Addr st_value; /* symbol value */
Elf32_Word st_size; /* symbol size */
unsigned char st_info; /* type and binding */
unsigned char st_other; /* 0 - no defined meaning */
Elf32_Half st_shndx; /* section header index */
} Elf32_Sym;
typedef struct
{
Elf64_Half st_name; /* Symbol name index in str table */
Elf_Byte st_info; /* type / binding attrs */
Elf_Byte st_other; /* unused */
Elf64_Quarter st_shndx; /* section index of symbol */
Elf64_Xword st_value; /* value of symbol */
Elf64_Xword st_size; /* size of symbol */
} Elf64_Sym;
/* Symbol table index */
#define STN_UNDEF 0 /* undefined */
/* Extract symbol info - st_info */
#define ELF32_ST_BIND(x) ((x) >> 4)
#define ELF32_ST_TYPE(x) (((unsigned int)x) & 0xf)
#define ELF32_ST_INFO(b, t) (((b) << 4) + ((t)&0xf))
#define ELF64_ST_BIND(x) ((x) >> 4)
#define ELF64_ST_TYPE(x) (((unsigned int)x) & 0xf)
#define ELF64_ST_INFO(b, t) (((b) << 4) + ((t)&0xf))
/* Symbol Binding - ELF32_ST_BIND - st_info */
#define STB_LOCAL 0 /* Local symbol */
#define STB_GLOBAL 1 /* Global symbol */
#define STB_WEAK 2 /* like global - lower precedence */
#define STB_NUM 3 /* number of symbol bindings */
#define STB_LOPROC 13 /* reserved range for processor */
#define STB_HIPROC 15 /* specific symbol bindings */
/* Symbol type - ELF32_ST_TYPE - st_info */
#define STT_NOTYPE 0 /* not specified */
#define STT_OBJECT 1 /* data object */
#define STT_FUNC 2 /* function */
#define STT_SECTION 3 /* section */
#define STT_FILE 4 /* file */
#define STT_TLS 6 /* thread local storage */
#define STT_LOPROC 13 /* reserved range for processor */
#define STT_HIPROC 15 /* specific symbol types */
/* Relocation entry with implicit addend */
typedef struct
{
Elf32_Addr r_offset; /* offset of relocation */
Elf32_Word r_info; /* symbol table index and type */
} Elf32_Rel;
/* Relocation entry with explicit addend */
typedef struct
{
Elf32_Addr r_offset; /* offset of relocation */
Elf32_Word r_info; /* symbol table index and type */
Elf32_Sword r_addend;
} Elf32_Rela;
/* Extract relocation info - r_info */
#define ELF32_R_SYM(i) ((i) >> 8)
#define ELF32_R_TYPE(i) ((unsigned char)(i))
#define ELF32_R_INFO(s, t) (((s) << 8) + (unsigned char)(t))
typedef struct
{
Elf64_Xword r_offset; /* where to do it */
Elf64_Xword r_info; /* index & type of relocation */
} Elf64_Rel;
typedef struct
{
Elf64_Xword r_offset; /* where to do it */
Elf64_Xword r_info; /* index & type of relocation */
Elf64_Sxword r_addend; /* adjustment value */
} Elf64_Rela;
#define ELF64_R_SYM(info) ((info) >> 32)
#define ELF64_R_TYPE(info) ((info)&0xFFFFFFFF)
#define ELF64_R_INFO(s, t) (((s) << 32) + (u32)(t))
#if defined(__mips64__) && defined(__MIPSEL__)
/*
* The 64-bit MIPS ELF ABI uses a slightly different relocation format
* than the regular ELF ABI: the r_info field is split into several
* pieces (see gnu/usr.bin/binutils/include/elf/mips.h for details).
*/
#undef ELF64_R_SYM
#undef ELF64_R_TYPE
#undef ELF64_R_INFO
#define ELF64_R_TYPE(info) (swap32((info) >> 32))
#define ELF64_R_SYM(info) ((info)&0xFFFFFFFF)
#define ELF64_R_INFO(s, t) (((u64)swap32(t) << 32) + (u32)(s))
#endif /* __mips64__ && __MIPSEL__ */
/* Program Header */
typedef struct
{
Elf32_Word p_type; /* segment type */
Elf32_Off p_offset; /* segment offset */
Elf32_Addr p_vaddr; /* virtual address of segment */
Elf32_Addr p_paddr; /* physical address - ignored? */
Elf32_Word p_filesz; /* number of bytes in file for seg. */
Elf32_Word p_memsz; /* number of bytes in mem. for seg. */
Elf32_Word p_flags; /* flags */
Elf32_Word p_align; /* memory alignment */
} Elf32_Phdr;
typedef struct
{
Elf64_Half p_type; /* entry type */
Elf64_Half p_flags; /* flags */
Elf64_Off p_offset; /* offset */
Elf64_Addr p_vaddr; /* virtual address */
Elf64_Addr p_paddr; /* physical address */
Elf64_Xword p_filesz; /* file size */
Elf64_Xword p_memsz; /* memory size */
Elf64_Xword p_align; /* memory & file alignment */
} Elf64_Phdr;
/* Segment types - p_type */
#define PT_NULL 0 /* unused */
#define PT_LOAD 1 /* loadable segment */
#define PT_DYNAMIC 2 /* dynamic linking section */
#define PT_INTERP 3 /* the RTLD */
#define PT_NOTE 4 /* auxiliary information */
#define PT_SHLIB 5 /* reserved - purpose undefined */
#define PT_PHDR 6 /* program header */
#define PT_TLS 7 /* thread local storage */
#define PT_LOOS 0x60000000 /* reserved range for OS */
#define PT_HIOS 0x6fffffff /* specific segment types */
#define PT_LOPROC 0x70000000 /* reserved range for processor */
#define PT_HIPROC 0x7fffffff /* specific segment types */
#define PT_OPENBSD_RANDOMIZE 0x65a3dbe6 /* fill with random data */
#define PT_GANDR_KERNEL 0x67646b6c /* gdkl */
/* Segment flags - p_flags */
#define PF_X 0x1 /* Executable */
#define PF_W 0x2 /* Writable */
#define PF_R 0x4 /* Readable */
#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */
/* specific segment flags */
/* Dynamic structure */
typedef struct
{
Elf32_Word d_tag; /* controls meaning of d_val */
union {
Elf32_Word d_val; /* Multiple meanings - see d_tag */
Elf32_Addr d_ptr; /* program virtual address */
} d_un;
} Elf32_Dyn;
typedef struct
{
Elf64_Xword d_tag; /* controls meaning of d_val */
union {
Elf64_Addr d_ptr;
Elf64_Xword d_val;
} d_un;
} Elf64_Dyn;
/* Dynamic Array Tags - d_tag */
#define DT_NULL 0 /* marks end of _DYNAMIC array */
#define DT_NEEDED 1 /* string table offset of needed lib */
#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */
#define DT_PLTGOT 3 /* address PLT/GOT */
#define DT_HASH 4 /* address of symbol hash table */
#define DT_STRTAB 5 /* address of string table */
#define DT_SYMTAB 6 /* address of symbol table */
#define DT_RELA 7 /* address of relocation table */
#define DT_RELASZ 8 /* size of relocation table */
#define DT_RELAENT 9 /* size of relocation entry */
#define DT_STRSZ 10 /* size of string table */
#define DT_SYMENT 11 /* size of symbol table entry */
#define DT_INIT 12 /* address of initialization func. */
#define DT_FINI 13 /* address of termination function */
#define DT_SONAME 14 /* string table offset of shared obj */
#define DT_RPATH 15 /* string table offset of library \
* search path */
#define DT_SYMBOLIC 16 /* start sym search in shared obj. */
#define DT_REL 17 /* address of rel. tbl. w addends */
#define DT_RELSZ 18 /* size of DT_REL relocation table */
#define DT_RELENT 19 /* size of DT_REL relocation entry */
#define DT_PLTREL 20 /* PLT referenced relocation entry */
#define DT_DEBUG 21 /* bugger */
#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */
#define DT_JMPREL 23 /* add. of PLT's relocation entries */
#define DT_BIND_NOW 24 /* Bind now regardless of env setting */
#define DT_LOOS 0x6000000d /* reserved range for OS */
#define DT_HIOS 0x6ffff000 /* specific dynamic array tags */
#define DT_LOPROC 0x70000000 /* reserved range for processor */
#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */
/* some other useful tags */
#define DT_RELACOUNT 0x6ffffff9 /* if present, number of RELATIVE */
#define DT_RELCOUNT 0x6ffffffa /* relocs, which must come first */
#define DT_FLAGS_1 0x6ffffffb
/* Dynamic Flags - DT_FLAGS_1 .dynamic entry */
#define DF_1_NOW 0x00000001
gitextract_s1mpgrgh/
├── .gitignore
├── LICENSE
├── Makefile
├── README.md
├── README_BOOTLOGO.md
├── Versions.inc
├── bdk/
│ ├── bdk.h
│ ├── display/
│ │ ├── di.c
│ │ ├── di.h
│ │ ├── di.inl
│ │ ├── vic.c
│ │ └── vic.h
│ ├── exception_handlers.S
│ ├── fatfs_cfg.h
│ ├── fatfs_conf.h
│ ├── gfx_utils.h
│ ├── ianos/
│ │ ├── elfload/
│ │ │ ├── elf.h
│ │ │ ├── elfarch.h
│ │ │ ├── elfload.c
│ │ │ ├── elfload.h
│ │ │ ├── elfreloc_aarch64.c
│ │ │ └── elfreloc_arm.c
│ │ ├── ianos.c
│ │ └── ianos.h
│ ├── input/
│ │ ├── als.c
│ │ ├── als.h
│ │ ├── joycon.c
│ │ ├── joycon.h
│ │ ├── touch.c
│ │ └── touch.h
│ ├── libs/
│ │ ├── compr/
│ │ │ ├── blz.c
│ │ │ ├── blz.h
│ │ │ ├── lz.c
│ │ │ ├── lz.h
│ │ │ ├── lz4.c
│ │ │ └── lz4.h
│ │ ├── fatfs/
│ │ │ ├── diskio.h
│ │ │ ├── ff.c
│ │ │ ├── ff.h
│ │ │ ├── ffsystem.c
│ │ │ └── ffunicode.c
│ │ ├── lv_conf.h
│ │ └── lvgl/
│ │ ├── docs/
│ │ │ ├── CODE_OF_CONDUCT.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── astyle_c
│ │ │ └── astyle_h
│ │ ├── licence.txt
│ │ ├── lv_core/
│ │ │ ├── lv_core.mk
│ │ │ ├── lv_group.c
│ │ │ ├── lv_group.h
│ │ │ ├── lv_indev.c
│ │ │ ├── lv_indev.h
│ │ │ ├── lv_lang.c
│ │ │ ├── lv_lang.h
│ │ │ ├── lv_obj.c
│ │ │ ├── lv_obj.h
│ │ │ ├── lv_refr.c
│ │ │ ├── lv_refr.h
│ │ │ ├── lv_style.c
│ │ │ ├── lv_style.h
│ │ │ ├── lv_vdb.c
│ │ │ └── lv_vdb.h
│ │ ├── lv_draw/
│ │ │ ├── lv_draw.c
│ │ │ ├── lv_draw.h
│ │ │ ├── lv_draw.mk
│ │ │ ├── lv_draw_arc.c
│ │ │ ├── lv_draw_arc.h
│ │ │ ├── lv_draw_img.c
│ │ │ ├── lv_draw_img.h
│ │ │ ├── lv_draw_label.c
│ │ │ ├── lv_draw_label.h
│ │ │ ├── lv_draw_line.c
│ │ │ ├── lv_draw_line.h
│ │ │ ├── lv_draw_rbasic.c
│ │ │ ├── lv_draw_rbasic.h
│ │ │ ├── lv_draw_rect.c
│ │ │ ├── lv_draw_rect.h
│ │ │ ├── lv_draw_triangle.c
│ │ │ ├── lv_draw_triangle.h
│ │ │ ├── lv_draw_vbasic.c
│ │ │ └── lv_draw_vbasic.h
│ │ ├── lv_fonts/
│ │ │ ├── hekate_symbol_120.c
│ │ │ ├── hekate_symbol_20.c
│ │ │ ├── hekate_symbol_30.c
│ │ │ ├── interui_20.c
│ │ │ ├── interui_30.c
│ │ │ ├── lv_font_builtin.c
│ │ │ ├── lv_font_builtin.h
│ │ │ ├── lv_fonts.mk
│ │ │ └── ubuntu_mono.c
│ │ ├── lv_hal/
│ │ │ ├── lv_hal.h
│ │ │ ├── lv_hal.mk
│ │ │ ├── lv_hal_disp.c
│ │ │ ├── lv_hal_disp.h
│ │ │ ├── lv_hal_indev.c
│ │ │ ├── lv_hal_indev.h
│ │ │ ├── lv_hal_tick.c
│ │ │ └── lv_hal_tick.h
│ │ ├── lv_misc/
│ │ │ ├── lv_anim.c
│ │ │ ├── lv_anim.h
│ │ │ ├── lv_area.c
│ │ │ ├── lv_area.h
│ │ │ ├── lv_circ.c
│ │ │ ├── lv_circ.h
│ │ │ ├── lv_color.c
│ │ │ ├── lv_color.h
│ │ │ ├── lv_font.c
│ │ │ ├── lv_font.h
│ │ │ ├── lv_fs.c
│ │ │ ├── lv_fs.h
│ │ │ ├── lv_gc.c
│ │ │ ├── lv_gc.h
│ │ │ ├── lv_ll.c
│ │ │ ├── lv_ll.h
│ │ │ ├── lv_log.c
│ │ │ ├── lv_log.h
│ │ │ ├── lv_math.c
│ │ │ ├── lv_math.h
│ │ │ ├── lv_mem.c
│ │ │ ├── lv_mem.h
│ │ │ ├── lv_misc.mk
│ │ │ ├── lv_symbol_def.h
│ │ │ ├── lv_task.c
│ │ │ ├── lv_task.h
│ │ │ ├── lv_templ.c
│ │ │ ├── lv_templ.h
│ │ │ ├── lv_txt.c
│ │ │ ├── lv_txt.h
│ │ │ ├── lv_ufs.c
│ │ │ └── lv_ufs.h
│ │ ├── lv_objx/
│ │ │ ├── lv_arc.c
│ │ │ ├── lv_arc.h
│ │ │ ├── lv_bar.c
│ │ │ ├── lv_bar.h
│ │ │ ├── lv_btn.c
│ │ │ ├── lv_btn.h
│ │ │ ├── lv_btnm.c
│ │ │ ├── lv_btnm.h
│ │ │ ├── lv_calendar.c
│ │ │ ├── lv_calendar.h
│ │ │ ├── lv_canvas.c
│ │ │ ├── lv_canvas.h
│ │ │ ├── lv_cb.c
│ │ │ ├── lv_cb.h
│ │ │ ├── lv_chart.c
│ │ │ ├── lv_chart.h
│ │ │ ├── lv_cont.c
│ │ │ ├── lv_cont.h
│ │ │ ├── lv_ddlist.c
│ │ │ ├── lv_ddlist.h
│ │ │ ├── lv_gauge.c
│ │ │ ├── lv_gauge.h
│ │ │ ├── lv_img.c
│ │ │ ├── lv_img.h
│ │ │ ├── lv_imgbtn.c
│ │ │ ├── lv_imgbtn.h
│ │ │ ├── lv_kb.c
│ │ │ ├── lv_kb.h
│ │ │ ├── lv_label.c
│ │ │ ├── lv_label.h
│ │ │ ├── lv_led.c
│ │ │ ├── lv_led.h
│ │ │ ├── lv_line.c
│ │ │ ├── lv_line.h
│ │ │ ├── lv_list.c
│ │ │ ├── lv_list.h
│ │ │ ├── lv_lmeter.c
│ │ │ ├── lv_lmeter.h
│ │ │ ├── lv_mbox.c
│ │ │ ├── lv_mbox.h
│ │ │ ├── lv_objx.mk
│ │ │ ├── lv_objx_templ.c
│ │ │ ├── lv_objx_templ.h
│ │ │ ├── lv_page.c
│ │ │ ├── lv_page.h
│ │ │ ├── lv_preload.c
│ │ │ ├── lv_preload.h
│ │ │ ├── lv_roller.c
│ │ │ ├── lv_roller.h
│ │ │ ├── lv_slider.c
│ │ │ ├── lv_slider.h
│ │ │ ├── lv_spinbox.c
│ │ │ ├── lv_spinbox.h
│ │ │ ├── lv_sw.c
│ │ │ ├── lv_sw.h
│ │ │ ├── lv_ta.c
│ │ │ ├── lv_ta.h
│ │ │ ├── lv_table.c
│ │ │ ├── lv_table.h
│ │ │ ├── lv_tabview.c
│ │ │ ├── lv_tabview.h
│ │ │ ├── lv_tileview.c
│ │ │ ├── lv_tileview.h
│ │ │ ├── lv_win.c
│ │ │ └── lv_win.h
│ │ ├── lv_themes/
│ │ │ ├── lv_theme.c
│ │ │ ├── lv_theme.h
│ │ │ ├── lv_theme_hekate.c
│ │ │ ├── lv_theme_hekate.h
│ │ │ └── lv_themes.mk
│ │ ├── lv_version.h
│ │ ├── lvgl.h
│ │ └── lvgl.mk
│ ├── mem/
│ │ ├── emc_t210.h
│ │ ├── heap.c
│ │ ├── heap.h
│ │ ├── mc.c
│ │ ├── mc.h
│ │ ├── mc_t210.h
│ │ ├── minerva.c
│ │ ├── minerva.h
│ │ ├── mtc_table.h
│ │ ├── sdram.c
│ │ ├── sdram.h
│ │ ├── sdram_config.inl
│ │ ├── sdram_config_t210b01.inl
│ │ ├── sdram_param_t210.h
│ │ ├── sdram_param_t210b01.h
│ │ ├── smmu.c
│ │ └── smmu.h
│ ├── memory_map.h
│ ├── module.h
│ ├── power/
│ │ ├── bm92t36.c
│ │ ├── bm92t36.h
│ │ ├── bq24193.c
│ │ ├── bq24193.h
│ │ ├── max17050.c
│ │ ├── max17050.h
│ │ ├── max77620.h
│ │ ├── max7762x.c
│ │ ├── max7762x.h
│ │ ├── max77812.h
│ │ ├── regulator_5v.c
│ │ └── regulator_5v.h
│ ├── rtc/
│ │ ├── max77620-rtc.c
│ │ └── max77620-rtc.h
│ ├── sec/
│ │ ├── se.c
│ │ ├── se.h
│ │ ├── se_t210.h
│ │ ├── tsec.c
│ │ ├── tsec.h
│ │ └── tsec_t210.h
│ ├── soc/
│ │ ├── actmon.c
│ │ ├── actmon.h
│ │ ├── bpmp.c
│ │ ├── bpmp.h
│ │ ├── ccplex.c
│ │ ├── ccplex.h
│ │ ├── clock.c
│ │ ├── clock.h
│ │ ├── fuse.c
│ │ ├── fuse.h
│ │ ├── gpio.c
│ │ ├── gpio.h
│ │ ├── hw_init.c
│ │ ├── hw_init.h
│ │ ├── i2c.c
│ │ ├── i2c.h
│ │ ├── irq.c
│ │ ├── irq.h
│ │ ├── kfuse.c
│ │ ├── kfuse.h
│ │ ├── pinmux.c
│ │ ├── pinmux.h
│ │ ├── pmc.c
│ │ ├── pmc.h
│ │ ├── pmc_t210.h
│ │ ├── t210.h
│ │ ├── timer.c
│ │ ├── timer.h
│ │ ├── uart.c
│ │ └── uart.h
│ ├── storage/
│ │ ├── emmc.c
│ │ ├── emmc.h
│ │ ├── mbr_gpt.h
│ │ ├── mmc_def.h
│ │ ├── nx_emmc_bis.c
│ │ ├── nx_emmc_bis.h
│ │ ├── ramdisk.c
│ │ ├── ramdisk.h
│ │ ├── sd.c
│ │ ├── sd.h
│ │ ├── sd_def.h
│ │ ├── sdmmc.c
│ │ ├── sdmmc.h
│ │ ├── sdmmc_driver.c
│ │ ├── sdmmc_driver.h
│ │ └── sdmmc_t210.h
│ ├── thermal/
│ │ ├── fan.c
│ │ ├── fan.h
│ │ ├── tmp451.c
│ │ └── tmp451.h
│ ├── usb/
│ │ ├── usb_descriptor_types.h
│ │ ├── usb_descriptors.c
│ │ ├── usb_gadget_hid.c
│ │ ├── usb_gadget_ums.c
│ │ ├── usb_t210.h
│ │ ├── usbd.c
│ │ ├── usbd.h
│ │ └── xusbd.c
│ └── utils/
│ ├── aarch64_util.h
│ ├── btn.c
│ ├── btn.h
│ ├── dirlist.c
│ ├── dirlist.h
│ ├── ini.c
│ ├── ini.h
│ ├── list.h
│ ├── sprintf.c
│ ├── sprintf.h
│ ├── tegra_bct.h
│ ├── tegra_bit.h
│ ├── types.h
│ ├── util.c
│ └── util.h
├── bootloader/
│ ├── config.c
│ ├── config.h
│ ├── frontend/
│ │ ├── fe_info.c
│ │ ├── fe_info.h
│ │ ├── fe_tools.c
│ │ └── fe_tools.h
│ ├── gfx/
│ │ ├── gfx.c
│ │ ├── gfx.h
│ │ ├── logos.c
│ │ ├── logos.h
│ │ ├── tui.c
│ │ └── tui.h
│ ├── hos/
│ │ ├── hos.c
│ │ ├── hos.h
│ │ ├── hos_config.c
│ │ ├── hos_config.h
│ │ ├── pkg1.c
│ │ ├── pkg1.h
│ │ ├── pkg2.c
│ │ ├── pkg2.h
│ │ ├── pkg2_ini_kippatch.c
│ │ ├── pkg2_ini_kippatch.h
│ │ ├── pkg2_patches.inl
│ │ ├── pkg3.c
│ │ ├── pkg3.h
│ │ ├── secmon_exo.c
│ │ └── secmon_exo.h
│ ├── l4t/
│ │ ├── l4t.c
│ │ ├── l4t.h
│ │ └── l4t_config.inl
│ ├── libs/
│ │ └── fatfs/
│ │ ├── diskio.c
│ │ └── ffconf.h
│ ├── link.ld
│ ├── main.c
│ ├── start.S
│ └── storage/
│ ├── emummc.c
│ └── emummc.h
├── loader/
│ ├── Makefile
│ ├── link.ld
│ ├── loader.c
│ └── start.S
├── modules/
│ ├── hekate_libsys_lp0/
│ │ ├── Makefile
│ │ ├── pmc_t210.h
│ │ ├── sdram_lp0_param_t210.h
│ │ ├── sdram_lp0_param_t210b01.h
│ │ ├── sys_sdramlp0.c
│ │ ├── t210.h
│ │ └── types.h
│ ├── hekate_libsys_minerva/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── mtc.h
│ │ ├── mtc_mc_emc_regs.h
│ │ ├── mtc_switch_tables.h
│ │ ├── mtc_table.h
│ │ ├── sys_sdrammtc.c
│ │ └── types.h
│ └── simple_sample/
│ ├── Makefile
│ ├── gfx/
│ │ ├── gfx.c
│ │ └── gfx.h
│ └── module_sample.c
├── nyx/
│ ├── Makefile
│ ├── README_RES.md
│ └── nyx_gui/
│ ├── config.c
│ ├── config.h
│ ├── frontend/
│ │ ├── fe_emmc_tools.c
│ │ ├── fe_emmc_tools.h
│ │ ├── fe_emummc_tools.c
│ │ ├── fe_emummc_tools.h
│ │ ├── gui.c
│ │ ├── gui.h
│ │ ├── gui_emmc_tools.c
│ │ ├── gui_emmc_tools.h
│ │ ├── gui_emummc_tools.c
│ │ ├── gui_emummc_tools.h
│ │ ├── gui_info.c
│ │ ├── gui_info.h
│ │ ├── gui_options.c
│ │ ├── gui_options.h
│ │ ├── gui_tools.c
│ │ ├── gui_tools.h
│ │ ├── gui_tools_partition_manager.c
│ │ └── gui_tools_partition_manager.h
│ ├── gfx/
│ │ ├── gfx.c
│ │ ├── gfx.h
│ │ └── logos-gui.h
│ ├── hos/
│ │ ├── hos.c
│ │ ├── hos.h
│ │ ├── pkg1.c
│ │ ├── pkg1.h
│ │ ├── pkg2.c
│ │ └── pkg2.h
│ ├── libs/
│ │ └── fatfs/
│ │ ├── diskio.c
│ │ └── ffconf.h
│ ├── link.ld
│ ├── nyx.c
│ └── start.S
├── res/
│ ├── bootlogo/
│ │ └── bootlogo.psd
│ ├── hekate_ipl_template.ini
│ └── patches_template.ini
└── tools/
├── bin2c/
│ ├── Makefile
│ └── bin2c.c
├── emc.def
├── fix_regs.py
├── lz/
│ ├── Makefile
│ ├── lz.c
│ ├── lz.h
│ └── lz77.c
├── mc.def
└── smmu_payload.py
Showing preview only (285K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3139 symbols across 294 files)
FILE: bdk/display/di.c
function display_enable_interrupt (line 41) | void display_enable_interrupt(u32 intr)
function display_disable_interrupt (line 46) | void display_disable_interrupt(u32 intr)
function display_wait_interrupt (line 52) | void display_wait_interrupt(u32 intr)
function _display_dsi_wait (line 61) | static void _display_dsi_wait(u32 timeout, u32 off, u32 mask)
function _display_dsi_soft_reset (line 69) | static void _display_dsi_soft_reset()
function _display_dsi_send_cmd (line 78) | static void _display_dsi_send_cmd(u8 cmd, u32 param, u32 wait)
function _display_dsi_wait_vblank (line 87) | static void _display_dsi_wait_vblank(bool enable)
function _display_dsi_read_rx_fifo (line 122) | static void _display_dsi_read_rx_fifo(u32 *data)
function display_dsi_read (line 138) | int display_dsi_read(u8 cmd, u32 len, void *data)
function display_dsi_vblank_read (line 197) | int display_dsi_vblank_read(u8 cmd, u32 len, void *data)
function display_dsi_write (line 269) | void display_dsi_write(u8 cmd, u32 len, void *data)
function display_dsi_vblank_write (line 316) | void display_dsi_vblank_write(u8 cmd, u32 len, void *data)
function display_init (line 353) | void display_init()
function display_backlight_pwm_init (line 603) | void display_backlight_pwm_init()
function display_backlight (line 620) | void display_backlight(bool enable)
function _display_dsi_backlight_brightness (line 629) | static void _display_dsi_backlight_brightness(u32 duty)
function _display_pwm_backlight_brightness (line 647) | static void _display_pwm_backlight_brightness(u32 duty, u32 step_delay)
function display_backlight_brightness (line 671) | void display_backlight_brightness(u32 brightness, u32 step_delay)
function _display_panel_and_hw_end (line 682) | static void _display_panel_and_hw_end(bool no_panel_deinit)
function display_end (line 806) | void display_end() { _display_panel_and_hw_end(false); }
function u32 (line 808) | u32 display_get_verbose_panel_id()
function u16 (line 813) | u16 display_get_decoded_panel_id()
function display_set_decoded_panel_id (line 818) | void display_set_decoded_panel_id(u32 id)
function display_color_screen (line 834) | void display_color_screen(u32 color)
function u32 (line 853) | u32 *display_init_window_a_pitch()
function u32 (line 865) | u32 *display_init_window_a_pitch_vic()
function u32 (line 877) | u32 *display_init_window_a_pitch_inv()
function u32 (line 886) | u32 *display_init_window_a_block()
function u32 (line 895) | u32 *display_init_window_d_console()
function display_window_disable (line 903) | void display_window_disable(u32 window)
function display_set_framebuffer (line 916) | void display_set_framebuffer(u32 window, void *fb)
function display_move_framebuffer (line 929) | void display_move_framebuffer(u32 window, void *fb)
function display_window_d_console_enable (line 950) | void display_window_d_console_enable()
function display_window_d_console_disable (line 985) | void display_window_d_console_disable()
function display_cursor_init (line 1011) | void display_cursor_init(void *crs_fb, u32 size)
function display_cursor_set_pos (line 1027) | void display_cursor_set_pos(u32 x, u32 y)
function display_cursor_deinit (line 1037) | void display_cursor_deinit()
FILE: bdk/display/vic.c
type OutputConfig (line 123) | typedef struct _OutputConfig {
type OutputSurfaceConfig (line 146) | typedef struct _OutputSurfaceConfig {
type SlotConfig (line 165) | typedef struct _SlotConfig {
type SlotSurfaceConfig (line 233) | typedef struct _SlotSurfaceConfig {
type SlotStruct (line 252) | typedef struct _SlotStruct {
type vic_config_t (line 263) | typedef struct _vic_config_t {
function u32 (line 344) | u32 _vic_read_priv(u32 addr)
function _vic_write_priv (line 362) | static void _vic_write_priv(u32 addr, u32 data)
function vic_wait_idle (line 378) | int vic_wait_idle()
function vic_set_surface (line 394) | void vic_set_surface(const vic_surface_t *sfc)
function vic_compose (line 530) | int vic_compose()
function vic_init (line 541) | int vic_init()
function vic_end (line 558) | void vic_end()
FILE: bdk/display/vic.h
type vic_rotation_t (line 26) | typedef enum _vic_rotation_t
type vic_pix_format_t (line 34) | typedef enum _vic_pix_format_t
type vic_surface_t (line 51) | typedef struct _vic_surface_t
FILE: bdk/ianos/elfload/elf.h
type u8 (line 35) | typedef u8 Elf_Byte;
type u32 (line 37) | typedef u32 Elf32_Addr;
type u32 (line 38) | typedef u32 Elf32_Off;
type s32 (line 39) | typedef s32 Elf32_Sword;
type u32 (line 40) | typedef u32 Elf32_Word;
type u16 (line 41) | typedef u16 Elf32_Half;
type u64 (line 43) | typedef u64 Elf64_Addr;
type u64 (line 44) | typedef u64 Elf64_Off;
type s32 (line 45) | typedef s32 Elf64_Shalf;
type s64 (line 48) | typedef s64 Elf64_Sword;
type u64 (line 49) | typedef u64 Elf64_Word;
type s32 (line 51) | typedef s32 Elf64_Sword;
type u32 (line 52) | typedef u32 Elf64_Word;
type s64 (line 55) | typedef s64 Elf64_Sxword;
type u64 (line 56) | typedef u64 Elf64_Xword;
type u32 (line 58) | typedef u32 Elf64_Half;
type u16 (line 59) | typedef u16 Elf64_Quarter;
type Elf32_Ehdr (line 121) | typedef struct
type Elf64_Ehdr (line 140) | typedef struct
type Elf32_Shdr (line 206) | typedef struct
type Elf64_Shdr (line 221) | typedef struct
type Elf32_Sym (line 295) | typedef struct elf32_sym
type Elf64_Sym (line 305) | typedef struct
type Elf32_Rel (line 346) | typedef struct
type Elf32_Rela (line 353) | typedef struct
type Elf64_Rel (line 365) | typedef struct
type Elf64_Rela (line 371) | typedef struct
type Elf32_Phdr (line 397) | typedef struct
type Elf64_Phdr (line 409) | typedef struct
type Elf32_Dyn (line 446) | typedef struct
type Elf64_Dyn (line 455) | typedef struct
type Elf32_Note (line 523) | typedef struct
type Elf64_Note (line 530) | typedef struct
FILE: bdk/ianos/elfload/elfload.c
function el_status (line 22) | el_status el_pread(el_ctx *ctx, void *def, size_t nb, size_t offset)
function el_status (line 28) | el_status el_findphdr(el_ctx *ctx, Elf_Phdr *phdr, u32 type, unsigned *i)
function el_status (line 47) | el_status el_findshdr(el_ctx *ctx, Elf_Shdr *shdr, u32 type, unsigned *i)
function el_status (line 68) | el_status el_init(el_ctx *ctx)
function el_status (line 173) | el_status el_load(el_ctx *ctx, el_alloc_cb alloc)
function el_status (line 216) | el_status el_finddyn(el_ctx *ctx, Elf_Dyn *dyn, u32 tag)
function el_status (line 234) | el_status el_findrelocs(el_ctx *ctx, el_relocinfo *ri, u32 type)
function el_status (line 268) | el_status el_relocate(el_ctx *ctx)
FILE: bdk/ianos/elfload/elfload.h
type el_status (line 36) | typedef enum
type el_ctx (line 54) | typedef struct el_ctx
type el_relocinfo (line 114) | typedef struct
FILE: bdk/ianos/elfload/elfreloc_aarch64.c
function el_status (line 24) | el_status el_applyrela(el_ctx *ctx, Elf_RelA *rel)
function el_status (line 54) | el_status el_applyrel(el_ctx *ctx, Elf_Rel *rel)
FILE: bdk/ianos/elfload/elfreloc_arm.c
function el_status (line 21) | el_status el_applyrel(el_ctx *ctx, Elf_Rel *rel)
FILE: bdk/ianos/ianos.c
function el_status (line 46) | static el_status _ianos_read_cb(el_ctx *ctx, void *dest, size_t nb, size...
function ianos_loader (line 54) | int ianos_loader(ianos_lib_t *lib, char *path)
function ianos_static_module (line 117) | uintptr_t ianos_static_module(char *path, void *private)
FILE: bdk/ianos/ianos.h
type ianos_type_t (line 24) | typedef enum
type ianos_lib_t (line 32) | typedef struct _ianos_lib_t
FILE: bdk/input/als.c
type opt_win_cal_t (line 40) | typedef struct _opt_win_cal_t
function set_als_cfg (line 66) | void set_als_cfg(als_ctxt_t *als_ctxt, u8 gain, u8 cycle)
function get_als_lux (line 81) | void get_als_lux(als_ctxt_t *als_ctxt)
function u8 (line 134) | u8 als_power_on(als_ctxt_t *als_ctxt)
FILE: bdk/input/als.h
type als_ctxt_t (line 51) | typedef struct _als_ctxt_t
FILE: bdk/input/joycon.c
type jc_rumble_fmt1_t (line 221) | typedef struct
type jc_rumble_fmt1_28bit_t (line 229) | typedef struct
type jc_rumble_fmt2_t (line 239) | typedef struct
type jc_rumble_fmt2_14bit_t (line 249) | typedef struct
type jc_rumble_fmt3_t (line 260) | typedef struct
type jc_rumble_fmt3_7bit_t (line 271) | typedef struct
type jc_rumble_t (line 284) | typedef struct _jc_rumble_t
type jc_uart_hdr_t (line 298) | typedef struct _jc_uart_hdr_t
type jc_wired_hdr_t (line 304) | typedef struct _jc_wired_hdr_t
type jc_hid_out_rpt_t (line 318) | typedef struct _jc_hid_out_rpt_t
type jc_hid_in_rpt_t (line 327) | typedef struct _jc_hid_in_rpt_t
type jc_hid_out_spi_read_t (line 345) | typedef struct _jc_hid_out_spi_read_t
type jc_hid_in_spi_read_t (line 351) | typedef struct _jc_hid_in_spi_read_t
type jc_hid_in_pair_data_t (line 358) | typedef struct _jc_hid_in_pair_data_t
type jc_sio_out_rpt_t (line 370) | typedef struct _jc_sio_out_rpt_t
type jc_sio_in_rpt_t (line 381) | typedef struct _jc_sio_in_rpt_t
type jc_hid_in_sixaxis_rpt_t (line 393) | typedef struct _jc_hid_in_sixaxis_rpt_t
type jc_sio_hid_in_rpt_t (line 403) | typedef struct _jc_sio_hid_in_rpt_t
type jc_dev_t (line 419) | typedef struct _jc_dev_t
function u8 (line 446) | static u8 _jc_crc(const u8 *data, u16 len)
function _jc_power_supply (line 463) | static void _jc_power_supply(u8 uart, bool enable)
function _jc_rail_detect (line 514) | static void _jc_rail_detect()
function _jc_conn_check (line 539) | static void _jc_conn_check()
function _joycon_send_raw (line 587) | static void _joycon_send_raw(u8 uart_port, const u8 *buf, u16 size)
function u16 (line 593) | static u16 _jc_packet_add_uart_hdr(jc_wired_hdr_t *rpt, u8 cmd, u8 subcm...
function u16 (line 612) | static u16 _jc_hid_output_rpt_craft(jc_wired_hdr_t *rpt, const u8 *paylo...
function _jc_send_hid_output_rpt (line 620) | static void _jc_send_hid_output_rpt(jc_dev_t *jc, jc_hid_out_rpt_t *hid_...
function _jc_send_hid_cmd (line 631) | static void _jc_send_hid_cmd(jc_dev_t *jc, u8 subcmd, const u8 *data, u1...
function _jc_parse_input (line 693) | static void _jc_parse_input(jc_dev_t *jc, const jc_hid_in_rpt_t *hid_pkt)
function _jc_parse_wired_hid (line 720) | static void _jc_parse_wired_hid(jc_dev_t *jc, const u8 *packet, int size)
function _jc_parse_wired_init (line 777) | static void _jc_parse_wired_init(jc_dev_t *jc, const jc_wired_hdr_t *pkt...
function _jc_uart_pkt_parse (line 822) | static void _jc_uart_pkt_parse(jc_dev_t *jc, const jc_wired_hdr_t *pkt, ...
function _jc_sio_parse_payload (line 846) | static void _jc_sio_parse_payload(jc_dev_t *jc, u8 cmd, const u8 *payloa...
function _jc_sio_uart_pkt_parse (line 876) | static void _jc_sio_uart_pkt_parse(jc_dev_t *jc, const jc_sio_in_rpt_t *...
function _jc_rcv_pkt (line 911) | static void _jc_rcv_pkt(jc_dev_t *jc)
function _jc_handle_charging (line 939) | static bool _jc_handle_charging(jc_dev_t *jc)
function _jc_send_enable_rumble (line 1026) | static bool _jc_send_enable_rumble(jc_dev_t *jc)
function _jc_req_status (line 1054) | static void _jc_req_status(jc_dev_t *jc)
function _jc_validate_pairing_info (line 1084) | static bool _jc_validate_pairing_info(const u8 *buf, bool *is_hos)
function jc_gamepad_rpt_t (line 1104) | jc_gamepad_rpt_t *jc_get_bt_pairing_info(bool *is_l_hos, bool *is_r_hos)
function _jc_conn_init (line 1249) | static void _jc_conn_init(jc_dev_t *jc)
function jc_init_hw (line 1410) | void jc_init_hw()
function jc_deinit (line 1478) | void jc_deinit()
function jc_gamepad_rpt_t (line 1519) | jc_gamepad_rpt_t *joycon_poll()
FILE: bdk/input/joycon.h
type jc_bt_conn_t (line 31) | typedef struct _jc_bt_conn_t
type jc_gamepad_rpt_t (line 39) | typedef struct _jc_gamepad_rpt_t
type jc_calib_t (line 95) | typedef struct _jc_calib_t
FILE: bdk/input/touch.c
function _touch_command (line 45) | static int _touch_command(u8 cmd, u8 *buf, u8 size)
function _touch_read_reg (line 50) | static int _touch_read_reg(u8 *cmd, u32 csize, u8 *buf, u32 size)
function touch_get_event_count (line 55) | int touch_get_event_count()
function _touch_wait_event (line 66) | static int _touch_wait_event(u8 event, u8 status, u32 timeout, u8 *buf)
function _touch_compensate_limits (line 97) | static void _touch_compensate_limits(touch_event_t *event, bool touching)
function _touch_process_contact_event (line 115) | static void _touch_process_contact_event(touch_event_t *event, bool touc...
function _touch_parse_input_event (line 141) | static int _touch_parse_input_event(touch_event_t *event)
function touch_poll (line 164) | int touch_poll(touch_event_t *event)
function touch_info_t (line 175) | touch_info_t *touch_get_chip_info()
function touch_panel_info_t (line 201) | touch_panel_info_t *touch_get_panel_vendor()
function touch_get_fw_info (line 228) | int touch_get_fw_info(touch_fw_info_t *fw)
function touch_sys_reset (line 253) | int touch_sys_reset()
function touch_panel_ito_test (line 274) | int touch_panel_ito_test(u8 *err)
function touch_get_fb_info (line 303) | int touch_get_fb_info(u8 *buf)
function touch_switch_sense_mode (line 325) | int touch_switch_sense_mode(u8 mode, bool gis_6_2)
function touch_sense_enable (line 349) | int touch_sense_enable()
function touch_execute_autotune (line 365) | int touch_execute_autotune()
function touch_init (line 400) | static int touch_init()
function touch_power_on (line 414) | int touch_power_on()
function touch_power_off (line 459) | void touch_power_off()
FILE: bdk/input/touch.h
type touch_ito_error (line 120) | typedef enum _touch_ito_error {
type touch_event_t (line 141) | typedef struct _touch_event_t {
type touch_panel_info_t (line 149) | typedef struct _touch_panel_info_t
type touch_info_t (line 158) | typedef struct _touch_info_t {
type touch_fw_info_t (line 166) | typedef struct _touch_fw_info_t {
FILE: bdk/libs/compr/blz.c
function blz_footer (line 23) | const blz_footer *blz_get_footer(const u8 *comp_data, u32 comp_data_size...
function blz_uncompress_inplace (line 36) | int blz_uncompress_inplace(u8 *data, u32 comp_size, const blz_footer *fo...
function blz_uncompress_srcdest (line 88) | int blz_uncompress_srcdest(const u8 *comp_data, u32 comp_data_size, u8 *...
FILE: bdk/libs/compr/blz.h
type blz_footer (line 22) | typedef struct _blz_footer
FILE: bdk/libs/compr/lz.c
function _LZ_ReadVarSize (line 91) | static int _LZ_ReadVarSize( unsigned int * x, const unsigned char * buf )
function LZ_Uncompress (line 128) | unsigned int LZ_Uncompress( const unsigned char *in, unsigned char *out,
FILE: bdk/libs/compr/lz4.c
type U16 (line 109) | typedef uint16_t U16;
type U32 (line 110) | typedef uint32_t U32;
type S32 (line 111) | typedef int32_t S32;
type U64 (line 112) | typedef uint64_t U64;
type uptrval (line 113) | typedef uintptr_t uptrval;
type reg_t (line 114) | typedef size_t reg_t;
function LZ4_isLittleEndian (line 119) | static unsigned LZ4_isLittleEndian(void)
function U16 (line 125) | static U16 LZ4_read16(const void* memPtr)
function U32 (line 130) | static U32 LZ4_read32(const void* memPtr)
function reg_t (line 135) | static reg_t LZ4_read_ARCH(const void* memPtr)
function LZ4_write16 (line 140) | static void LZ4_write16(void* memPtr, U16 value)
function LZ4_write32 (line 145) | static void LZ4_write32(void* memPtr, U32 value)
function U16 (line 150) | static U16 LZ4_readLE16(const void* memPtr)
function LZ4_writeLE16 (line 160) | static void LZ4_writeLE16(void* memPtr, U16 value)
function LZ4_FORCE_O2_INLINE_GCC_PPC64LE (line 172) | LZ4_FORCE_O2_INLINE_GCC_PPC64LE
function LZ4_NbCommonBytes (line 229) | static unsigned LZ4_NbCommonBytes (reg_t val)
function LZ4_count (line 247) | LZ4_FORCE_INLINE
type limitedOutput_directive (line 285) | typedef enum { notLimited = 0, limitedOutput = 1 } limitedOutput_directive;
type tableType_t (line 286) | typedef enum { clearedTable = 0, byPtr, byU32, byU16 } tableType_t;
type dict_directive (line 311) | typedef enum { noDict = 0, withPrefix64k, usingExtDict, usingDictCtx } d...
type dictIssue_directive (line 312) | typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive;
type endCondition_directive (line 314) | typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_di...
type earlyEnd_directive (line 315) | typedef enum { full = 0, partial = 1 } earlyEnd_directive;
function LZ4_versionNumber (line 321) | int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; }
function LZ4_compressBound (line 323) | int LZ4_compressBound(int isize) { return LZ4_COMPRESSBOUND(isize); }
function LZ4_sizeofState (line 324) | int LZ4_sizeofState() { return LZ4_STREAMSIZE; }
function U32 (line 330) | static U32 LZ4_hash4(U32 sequence, tableType_t const tableType)
function U32 (line 338) | static U32 LZ4_hash5(U64 sequence, tableType_t const tableType)
function LZ4_FORCE_INLINE (line 349) | LZ4_FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t c...
function LZ4_putIndexOnHash (line 355) | static void LZ4_putIndexOnHash(U32 idx, U32 h, void* tableBase, tableTyp...
function LZ4_putPositionOnHash (line 367) | static void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase,...
function LZ4_FORCE_INLINE (line 378) | LZ4_FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, ta...
function U32 (line 390) | static U32 LZ4_getIndexOnHash(U32 h, const void* tableBase, tableType_t ...
function BYTE (line 398) | static const BYTE* LZ4_getPositionOnHash(U32 h, const void* tableBase, t...
function LZ4_FORCE_INLINE (line 405) | LZ4_FORCE_INLINE const BYTE* LZ4_getPosition(const BYTE* p, const void* ...
function LZ4_FORCE_INLINE (line 411) | LZ4_FORCE_INLINE void LZ4_prepareTable(
function LZ4_FORCE_INLINE (line 452) | LZ4_FORCE_INLINE int LZ4_compress_generic(
function LZ4_compress_fast_extState (line 761) | int LZ4_compress_fast_extState(void* state, const char* source, char* de...
function LZ4_compress_fast_extState_fastReset (line 792) | int LZ4_compress_fast_extState_fastReset(void* state, const char* src, c...
function LZ4_compress_fast (line 829) | int LZ4_compress_fast(const char* source, char* dest, int inputSize, int...
function LZ4_compress_default (line 842) | int LZ4_compress_default(const char* source, char* dest, int inputSize, ...
function LZ4_compress_fast_force (line 850) | int LZ4_compress_fast_force(const char* source, char* dest, int inputSiz...
function LZ4_compress_destSize_generic (line 871) | static int LZ4_compress_destSize_generic(
function LZ4_compress_destSize_extState (line 1027) | static int LZ4_compress_destSize_extState (LZ4_stream_t* state, const ch...
function LZ4_compress_destSize (line 1043) | int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, i...
function LZ4_stream_t (line 1061) | LZ4_stream_t* LZ4_createStream(void)
function LZ4_resetStream (line 1071) | void LZ4_resetStream (LZ4_stream_t* LZ4_stream)
function LZ4_resetStream_fast (line 1077) | void LZ4_resetStream_fast(LZ4_stream_t* ctx) {
function LZ4_freeStream (line 1081) | int LZ4_freeStream (LZ4_stream_t* LZ4_stream)
function LZ4_loadDict (line 1091) | int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int di...
function LZ4_attach_dictionary (line 1129) | void LZ4_attach_dictionary(LZ4_stream_t *working_stream, const LZ4_strea...
function LZ4_renormDictT (line 1146) | static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, int nextSize)
function LZ4_compress_fast_continue (line 1165) | int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, const char* so...
function LZ4_compress_forceExtDict (line 1227) | int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* sourc...
function LZ4_saveDict (line 1254) | int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize)
function LZ4_decompress_generic (line 1282) | int LZ4_decompress_generic(
function LZ4_FORCE_O2_GCC_PPC64LE (line 1463) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_FORCE_O2_GCC_PPC64LE (line 1469) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_FORCE_O2_GCC_PPC64LE (line 1475) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_streamDecode_t (line 1484) | LZ4_streamDecode_t* LZ4_createStreamDecode(void)
function LZ4_freeStreamDecode (line 1490) | int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream)
function LZ4_setStreamDecode (line 1504) | int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const cha...
function LZ4_FORCE_O2_GCC_PPC64LE (line 1521) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_FORCE_O2_GCC_PPC64LE (line 1548) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_decompress_usingDict_generic (line 1584) | int LZ4_decompress_usingDict_generic(const char* source, char* dest, int...
function LZ4_FORCE_O2_GCC_PPC64LE (line 1596) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_FORCE_O2_GCC_PPC64LE (line 1602) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_FORCE_O2_GCC_PPC64LE (line 1609) | LZ4_FORCE_O2_GCC_PPC64LE
function LZ4_compress_limitedOutput (line 1620) | int LZ4_compress_limitedOutput(const char* source, char* dest, int input...
function LZ4_compress (line 1621) | int LZ4_compress(const char* source, char* dest, int inputSize) { return...
function LZ4_compress_limitedOutput_withState (line 1622) | int LZ4_compress_limitedOutput_withState (void* state, const char* src, ...
function LZ4_compress_withState (line 1623) | int LZ4_compress_withState (void* state, const char* src, char* dst, int...
function LZ4_compress_limitedOutput_continue (line 1624) | int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const...
function LZ4_compress_continue (line 1625) | int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source,...
function LZ4_uncompress (line 1633) | int LZ4_uncompress (const char* source, char* dest, int outputSize) { re...
function LZ4_uncompress_unknownOutputSize (line 1634) | int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, in...
function LZ4_sizeofStreamState (line 1638) | int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; }
function LZ4_resetStreamState (line 1640) | int LZ4_resetStreamState(void* state, char* inputBuffer)
function LZ4_decompress_safe_withPrefix64k (line 1661) | int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, in...
function LZ4_decompress_fast_withPrefix64k (line 1666) | int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, in...
FILE: bdk/libs/compr/lz4.h
type LZ4_stream_t (line 239) | typedef union LZ4_stream_u LZ4_stream_t;
type LZ4_streamDecode_t (line 294) | typedef union LZ4_streamDecode_u LZ4_streamDecode_t;
type LZ4_stream_t_internal (line 434) | typedef struct LZ4_stream_t_internal LZ4_stream_t_internal;
type LZ4_stream_t_internal (line 435) | struct LZ4_stream_t_internal {
type LZ4_streamDecode_t_internal (line 445) | typedef struct {
type LZ4_stream_t_internal (line 454) | typedef struct LZ4_stream_t_internal LZ4_stream_t_internal;
type LZ4_stream_t_internal (line 455) | struct LZ4_stream_t_internal {
type LZ4_streamDecode_t_internal (line 465) | typedef struct {
FILE: bdk/libs/fatfs/diskio.h
type BYTE (line 15) | typedef BYTE DSTATUS;
type DRESULT (line 18) | typedef enum {
type DDRIVE (line 26) | typedef enum {
FILE: bdk/libs/fatfs/ff.c
type FILESEM (line 282) | typedef struct {
function print_error (line 601) | void print_error()
function WORD (line 611) | static WORD ld_word (const BYTE* ptr) /* Load a 2-byte little-endian wo...
function DWORD (line 620) | static DWORD ld_dword (const BYTE* ptr) /* Load a 4-byte little-endian w...
function QWORD (line 632) | static QWORD ld_qword (const BYTE* ptr) /* Load an 8-byte little-endian ...
function st_word (line 649) | static void st_word (BYTE* ptr, WORD val) /* Store a 2-byte word in litt...
function st_dword (line 655) | static void st_dword (BYTE* ptr, DWORD val) /* Store a 4-byte word in li...
function st_qword (line 664) | static void st_qword (BYTE* ptr, QWORD val) /* Store an 8-byte word in l...
function mem_cpy (line 685) | static void mem_cpy (void* dst, const void* src, UINT cnt)
function mem_set (line 699) | static void mem_set (void* dst, int val, UINT cnt)
function mem_cmp (line 710) | static int mem_cmp (const void* dst, const void* src, UINT cnt) /* ZR:sa...
function chk_chr (line 724) | static int chk_chr (const char* str, int chr) /* NZ:contained, ZR:not co...
function dbc_1st (line 732) | static int dbc_1st (BYTE c)
function dbc_2nd (line 752) | static int dbc_2nd (BYTE c)
function DWORD (line 776) | static DWORD tchar2uni ( /* Returns character in UTF-16 encoding (>=0x10...
function BYTE (line 849) | static BYTE put_utf ( /* Returns number of encoding units written (0:buf...
function lock_fs (line 938) | static int lock_fs ( /* 1:Ok, 0:timeout */
function unlock_fs (line 946) | static void unlock_fs (
function FRESULT (line 965) | static FRESULT chk_lock ( /* Check if the file can be accessed */
function enq_lock (line 992) | static int enq_lock (void) /* Check if an entry is available for a new o...
function UINT (line 1001) | static UINT inc_lock ( /* Increment object open counter and returns its ...
function FRESULT (line 1032) | static FRESULT dec_lock ( /* Decrement object open counter */
function clear_lock (line 1054) | static void clear_lock ( /* Clear lock entries of the volume */
function FRESULT (line 1073) | static FRESULT sync_window ( /* Returns FR_OK or FR_DISK_ERR */
function FRESULT (line 1095) | static FRESULT move_window ( /* Returns FR_OK or FR_DISK_ERR */
function FRESULT (line 1126) | static FRESULT sync_fs ( /* Returns FR_OK or FR_DISK_ERR */
function DWORD (line 1163) | static DWORD clst2sect ( /* !=0:Sector number, 0:Failed (invalid cluster...
function DWORD (line 1180) | static DWORD get_fat ( /* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0...
function FRESULT (line 1257) | static FRESULT put_fat ( /* FR_OK(0):succeeded, !=0:error */
function DWORD (line 1322) | static DWORD find_bitmap ( /* 0:Not found, 2..:Cluster block found, 0xFF...
function FRESULT (line 1362) | static FRESULT change_bitmap (
function FRESULT (line 1398) | static FRESULT fill_first_frag (
function FRESULT (line 1421) | static FRESULT fill_last_frag (
function FRESULT (line 1447) | static FRESULT remove_chain ( /* FR_OK(0):succeeded, !=0:error */
function DWORD (line 1542) | static DWORD create_chain ( /* 0:No free cluster, 1:Internal error, 0xFF...
function DWORD (line 1645) | static DWORD clmt_clust ( /* <2:Error, >=2:Cluster number */
function FRESULT (line 1675) | static FRESULT dir_clear ( /* Returns FR_OK or FR_DISK_ERR */
function FRESULT (line 1714) | static FRESULT dir_sdi ( /* FR_OK(0):succeeded, !=0:error */
function FRESULT (line 1762) | static FRESULT dir_next ( /* FR_OK(0):succeeded, FR_NO_FILE:End of table...
function DWORD (line 1865) | static DWORD ld_clust ( /* Returns the top cluster value of the SFN entr...
function st_clust (line 1882) | static void st_clust (
function cmp_lfn (line 1902) | static int cmp_lfn ( /* 1:matched, 0:not matched */
function pick_lfn (line 1938) | static int pick_lfn ( /* 1:succeeded, 0:buffer overflow or invalid LFN e...
function put_lfn (line 1976) | static void put_lfn (
function gen_numname (line 2013) | static void gen_numname (
function BYTE (line 2071) | static BYTE sum_sfn (
function WORD (line 2093) | static WORD xdir_sum ( /* Get checksum of the directoly entry block */
function WORD (line 2114) | static WORD xname_sum ( /* Get check sum (to be used as hash) of the fil...
function DWORD (line 2132) | static DWORD xsum32 ( /* Returns 32-bit checksum */
function get_xfileinfo (line 2148) | static void get_xfileinfo (
function FRESULT (line 2189) | static FRESULT load_xdir ( /* FR_INT_ERR: invalid entry block */
function init_alloc_info (line 2240) | static void init_alloc_info (
function FRESULT (line 2258) | static FRESULT load_obj_xdir (
function FRESULT (line 2287) | static FRESULT store_xdir (
function create_xdir (line 2319) | static void create_xdir (
function FRESULT (line 2365) | static FRESULT dir_read (
function FRESULT (line 2443) | static FRESULT dir_find ( /* FR_OK(0):succeeded, !=0:error */
function FRESULT (line 2524) | static FRESULT dir_register ( /* FR_OK:succeeded, FR_DENIED:no free entr...
function FRESULT (line 2630) | static FRESULT dir_remove ( /* FR_OK:Succeeded, FR_DISK_ERR:A disk error */
function get_fileinfo (line 2676) | static void get_fileinfo (
function DWORD (line 2782) | static DWORD get_achar ( /* Get a character and advances ptr */
function pattern_matching (line 2813) | static int pattern_matching ( /* 0:not matched, 1:matched */
function FRESULT (line 2860) | static FRESULT create_name ( /* FR_OK: successful, FR_INVALID_NAME: coul...
function FRESULT (line 3057) | static FRESULT follow_path ( /* FR_OK(0): successful, !=0: error code */
function get_ldnumber (line 3144) | static int get_ldnumber ( /* Returns logical drive number (-1:invalid dr...
function BYTE (line 3218) | static BYTE check_fs ( /* 0:FAT, 1:exFAT, 2:Valid BS but not FAT, 3:Not ...
function FRESULT (line 3245) | static FRESULT find_volume ( /* FR_OK(0): successful, !=0: an error occu...
function FRESULT (line 3523) | static FRESULT validate ( /* Returns FR_OK or FR_INVALID_OBJECT */
function FRESULT (line 3567) | FRESULT f_mount (
function FRESULT (line 3618) | FRESULT f_open (
function FRESULT (line 3808) | FRESULT f_read (
function FRESULT (line 3928) | FRESULT f_read_fast (
function FRESULT (line 4019) | FRESULT f_write (
function FRESULT (line 4158) | FRESULT f_write_fast (
function FRESULT (line 4254) | FRESULT f_sync (
function FRESULT (line 4335) | FRESULT f_close (
function FRESULT (line 4371) | FRESULT f_chdrive (
function FRESULT (line 4388) | FRESULT f_chdir (
function FRESULT (line 4450) | FRESULT f_getcwd (
function FRESULT (line 4550) | FRESULT f_lseek (
function DWORD (line 4711) | DWORD *f_expand_cltbl (
function FRESULT (line 4749) | FRESULT f_opendir (
function FRESULT (line 4815) | FRESULT f_closedir (
function FRESULT (line 4845) | FRESULT f_readdir (
function FRESULT (line 4881) | FRESULT f_findnext (
function FRESULT (line 4906) | FRESULT f_findfirst (
function FRESULT (line 4933) | FRESULT f_stat (
function FRESULT (line 4968) | FRESULT f_getfree (
function FRESULT (line 5057) | FRESULT f_truncate (
function FRESULT (line 5107) | FRESULT f_unlink (
function FRESULT (line 5201) | FRESULT f_mkdir (
function FRESULT (line 5285) | FRESULT f_rename (
function FRESULT (line 5395) | FRESULT f_chmod (
function FRESULT (line 5442) | FRESULT f_utime (
function FRESULT (line 5489) | FRESULT f_getlabel (
function FRESULT (line 5584) | FRESULT f_setlabel (
function FRESULT (line 5704) | FRESULT f_expand (
function FRESULT (line 5794) | FRESULT f_forward (
function FRESULT (line 5865) | FRESULT f_mkfs (
function FRESULT (line 6362) | FRESULT f_fdisk (
function TCHAR (line 6445) | TCHAR* f_gets (
type putbuff (line 6573) | typedef struct { /* Putchar output buffer and work area */
function putc_bfd (line 6586) | static void putc_bfd ( /* Buffered write with code conversion */
function putc_flush (line 6717) | static int putc_flush ( /* Flush left characters in the buffer */
function putc_init (line 6730) | static void putc_init ( /* Initialize write buffer */
function f_putc (line 6741) | int f_putc (
function f_puts (line 6761) | int f_puts (
function f_printf (line 6782) | int f_printf (
function FRESULT (line 6901) | FRESULT f_setcp (
FILE: bdk/libs/fatfs/ff.h
type PARTITION (line 41) | typedef struct {
type WCHAR (line 62) | typedef WCHAR TCHAR;
type TCHAR (line 66) | typedef char TCHAR;
type DWORD (line 70) | typedef DWORD TCHAR;
type TCHAR (line 76) | typedef char TCHAR;
type QWORD (line 88) | typedef QWORD FSIZE_t;
type DWORD (line 90) | typedef DWORD FSIZE_t;
type FATFS (line 97) | typedef struct {
type FFOBJID (line 148) | typedef struct {
type FIL (line 171) | typedef struct {
type DIR (line 194) | typedef struct {
type FILINFO (line 213) | typedef struct {
type FRESULT (line 230) | typedef enum {
FILE: bdk/libs/fatfs/ffsystem.c
function ff_memfree (line 30) | void ff_memfree (
function DWORD (line 45) | DWORD get_fattime (
FILE: bdk/libs/fatfs/ffunicode.c
function WCHAR (line 255) | WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */
function WCHAR (line 277) | WCHAR ff_oem2uni ( /* Returns Unicode character, zero on error */
function WCHAR (line 308) | WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */
function WCHAR (line 344) | WCHAR ff_oem2uni ( /* Returns Unicode character, zero on error */
function WCHAR (line 391) | WCHAR ff_uni2oem ( /* Returns OEM code character, zero on error */
function WCHAR (line 443) | WCHAR ff_oem2uni ( /* Returns Unicode character, zero on error */
function DWORD (line 497) | DWORD ff_wtoupper ( /* Returns up-converted code point */
FILE: bdk/libs/lvgl/lv_core/lv_group.c
function lv_group_t (line 45) | lv_group_t * lv_group_create(void)
function lv_group_del (line 67) | void lv_group_del(lv_group_t * group)
function lv_group_add_obj (line 90) | void lv_group_add_obj(lv_group_t * group, lv_obj_t * obj)
function lv_group_remove_obj (line 120) | void lv_group_remove_obj(lv_obj_t * obj)
function lv_group_focus_obj (line 160) | void lv_group_focus_obj(lv_obj_t * obj)
function lv_group_focus_next (line 198) | void lv_group_focus_next(lv_group_t * group)
function lv_group_focus_prev (line 232) | void lv_group_focus_prev(lv_group_t * group)
function lv_group_focus_freeze (line 268) | void lv_group_focus_freeze(lv_group_t * group, bool en)
function lv_res_t (line 280) | lv_res_t lv_group_send_data(lv_group_t * group, uint32_t c)
function lv_group_set_style_mod_cb (line 293) | void lv_group_set_style_mod_cb(lv_group_t * group, lv_group_style_mod_fu...
function lv_group_set_style_mod_edit_cb (line 304) | void lv_group_set_style_mod_edit_cb(lv_group_t * group, lv_group_style_m...
function lv_group_set_focus_cb (line 315) | void lv_group_set_focus_cb(lv_group_t * group, lv_group_focus_cb_t focus...
function lv_group_set_editing (line 325) | void lv_group_set_editing(lv_group_t * group, bool edit)
function lv_group_set_click_focus (line 344) | void lv_group_set_click_focus(lv_group_t * group, bool en)
function lv_group_set_refocus_policy (line 349) | void lv_group_set_refocus_policy(lv_group_t * group, lv_group_refocus_po...
function lv_group_refocus (line 353) | static void lv_group_refocus(lv_group_t *g) {
function lv_group_set_wrap (line 371) | void lv_group_set_wrap(lv_group_t * group, bool en)
function lv_style_t (line 382) | lv_style_t * lv_group_mod_style(lv_group_t * group, const lv_style_t * s...
function lv_obj_t (line 399) | lv_obj_t * lv_group_get_focused(const lv_group_t * group)
function lv_group_style_mod_func_t (line 412) | lv_group_style_mod_func_t lv_group_get_style_mod_cb(const lv_group_t * g...
function lv_group_style_mod_func_t (line 423) | lv_group_style_mod_func_t lv_group_get_style_mod_edit_cb(const lv_group_...
function lv_group_focus_cb_t (line 434) | lv_group_focus_cb_t lv_group_get_focus_cb(const lv_group_t * group)
function lv_group_get_editing (line 445) | bool lv_group_get_editing(const lv_group_t * group)
function lv_group_get_click_focus (line 456) | bool lv_group_get_click_focus(const lv_group_t * group)
function lv_group_get_wrap (line 467) | bool lv_group_get_wrap(lv_group_t * group)
function style_mod_def (line 481) | static void style_mod_def(lv_style_t * style)
function style_mod_edit_def (line 510) | static void style_mod_edit_def(lv_style_t * style)
function obj_to_foreground (line 535) | static void obj_to_foreground(lv_obj_t * obj)
FILE: bdk/libs/lvgl/lv_core/lv_group.h
type _lv_group_t (line 44) | struct _lv_group_t
type _lv_group_t (line 47) | struct _lv_group_t
type lv_group_t (line 49) | typedef struct _lv_group_t
type lv_group_refocus_policy_t (line 64) | typedef enum _lv_group_refocus_policy_t {
FILE: bdk/libs/lvgl/lv_core/lv_indev.c
function lv_indev_init (line 65) | void lv_indev_init(void)
function lv_indev_t (line 78) | lv_indev_t * lv_indev_get_act(void)
function lv_hal_indev_type_t (line 88) | lv_hal_indev_type_t lv_indev_get_type(const lv_indev_t * indev)
function lv_indev_reset (line 98) | void lv_indev_reset(lv_indev_t * indev)
function lv_indev_reset_lpr (line 114) | void lv_indev_reset_lpr(lv_indev_t * indev)
function lv_indev_enable (line 126) | void lv_indev_enable(lv_hal_indev_type_t type, bool enable)
function lv_indev_set_cursor (line 141) | void lv_indev_set_cursor(lv_indev_t * indev, lv_obj_t * cur_obj)
function lv_indev_set_group (line 159) | void lv_indev_set_group(lv_indev_t * indev, lv_group_t * group)
function lv_indev_set_button_points (line 171) | void lv_indev_set_button_points(lv_indev_t * indev, const lv_point_t * p...
function lv_indev_set_feedback (line 181) | void lv_indev_set_feedback(lv_indev_t *indev, lv_indev_feedback_t feedback)
function lv_indev_get_point (line 191) | void lv_indev_get_point(const lv_indev_t * indev, lv_point_t * point)
function lv_indev_get_key (line 207) | uint32_t lv_indev_get_key(const lv_indev_t * indev)
function lv_indev_is_dragging (line 218) | bool lv_indev_is_dragging(const lv_indev_t * indev)
function lv_indev_get_vect (line 230) | void lv_indev_get_vect(const lv_indev_t * indev, lv_point_t * point)
function lv_indev_get_inactive_time (line 252) | uint32_t lv_indev_get_inactive_time(const lv_indev_t * indev)
function lv_indev_feedback_t (line 274) | lv_indev_feedback_t lv_indev_get_feedback(const lv_indev_t *indev)
function lv_indev_wait_release (line 283) | void lv_indev_wait_release(lv_indev_t * indev)
function indev_proc_task (line 297) | static void indev_proc_task(void * param)
function indev_pointer_proc (line 354) | static void indev_pointer_proc(lv_indev_t * i, lv_indev_data_t * data)
function indev_keypad_proc (line 392) | static void indev_keypad_proc(lv_indev_t * i, lv_indev_data_t * data)
function indev_encoder_proc (line 461) | static void indev_encoder_proc(lv_indev_t * i, lv_indev_data_t * data)
function indev_button_proc (line 557) | static void indev_button_proc(lv_indev_t * i, lv_indev_data_t * data)
function indev_proc_press (line 588) | static void indev_proc_press(lv_indev_proc_t * proc)
function indev_proc_release (line 702) | static void indev_proc_release(lv_indev_proc_t * proc)
function indev_proc_reset_query_handler (line 784) | static void indev_proc_reset_query_handler(lv_indev_t * indev)
function lv_obj_t (line 805) | static lv_obj_t * indev_search_obj(const lv_indev_proc_t * proc, lv_obj_...
function indev_drag (line 844) | static void indev_drag(lv_indev_proc_t * state)
function indev_drag_throw (line 917) | static void indev_drag_throw(lv_indev_proc_t * state)
FILE: bdk/libs/lvgl/lv_core/lv_lang.c
function lv_lang_set (line 46) | void lv_lang_set(uint8_t lang_id)
function lv_lang_set_text_func (line 64) | void lv_lang_set_text_func(const void * (*fp)(uint16_t))
function lv_lang_act (line 93) | uint8_t lv_lang_act(void)
function lang_set_core (line 107) | static void lang_set_core(lv_obj_t * obj)
FILE: bdk/libs/lvgl/lv_core/lv_obj.c
function lv_init (line 65) | void lv_init(void)
function lv_obj_t (line 135) | lv_obj_t * lv_obj_create(lv_obj_t * parent, const lv_obj_t * copy)
function lv_res_t (line 339) | lv_res_t lv_obj_del(lv_obj_t * obj)
function lv_obj_clean (line 406) | void lv_obj_clean(lv_obj_t * obj)
function lv_obj_invalidate (line 423) | void lv_obj_invalidate(const lv_obj_t * obj)
function lv_scr_load (line 470) | void lv_scr_load(lv_obj_t * scr)
function lv_obj_set_parent (line 486) | void lv_obj_set_parent(lv_obj_t * obj, lv_obj_t * parent)
function lv_obj_set_pos (line 530) | void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
function lv_obj_set_x (line 577) | void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x)
function lv_obj_set_y (line 588) | void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y)
function lv_obj_set_size (line 599) | void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
function lv_obj_set_width (line 642) | void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w)
function lv_obj_set_height (line 652) | void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h)
function lv_obj_align (line 665) | void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t alig...
function lv_obj_align_origo (line 810) | void lv_obj_align_origo(lv_obj_t * obj, const lv_obj_t * base, lv_align_...
function lv_obj_realign (line 954) | void lv_obj_realign(lv_obj_t * obj)
function lv_obj_set_auto_realign (line 970) | void lv_obj_set_auto_realign(lv_obj_t * obj, bool en)
function lv_obj_set_style (line 990) | void lv_obj_set_style(lv_obj_t * obj, lv_style_t * style)
function lv_obj_refresh_style (line 1005) | void lv_obj_refresh_style(lv_obj_t * obj)
function lv_obj_report_style_mod (line 1018) | void lv_obj_report_style_mod(lv_style_t * style)
function lv_obj_set_hidden (line 1039) | void lv_obj_set_hidden(lv_obj_t * obj, bool en)
function lv_obj_set_click (line 1057) | void lv_obj_set_click(lv_obj_t * obj, bool en)
function lv_obj_set_top (line 1068) | void lv_obj_set_top(lv_obj_t * obj, bool en)
function lv_obj_set_drag (line 1078) | void lv_obj_set_drag(lv_obj_t * obj, bool en)
function lv_obj_set_drag_throw (line 1089) | void lv_obj_set_drag_throw(lv_obj_t * obj, bool en)
function lv_obj_set_drag_parent (line 1100) | void lv_obj_set_drag_parent(lv_obj_t * obj, bool en)
function lv_obj_set_opa_scale_enable (line 1110) | void lv_obj_set_opa_scale_enable(lv_obj_t * obj, bool en)
function lv_obj_set_opa_scale (line 1120) | void lv_obj_set_opa_scale(lv_obj_t * obj, lv_opa_t opa_scale)
function lv_obj_set_protect (line 1131) | void lv_obj_set_protect(lv_obj_t * obj, uint8_t prot)
function lv_obj_clear_protect (line 1141) | void lv_obj_clear_protect(lv_obj_t * obj, uint8_t prot)
function lv_obj_set_signal_func (line 1153) | void lv_obj_set_signal_func(lv_obj_t * obj, lv_signal_func_t fp)
function lv_obj_set_design_func (line 1163) | void lv_obj_set_design_func(lv_obj_t * obj, lv_design_func_t fp)
function lv_obj_refresh_ext_size (line 1189) | void lv_obj_refresh_ext_size(lv_obj_t * obj)
function lv_obj_set_free_num (line 1204) | void lv_obj_set_free_num(lv_obj_t * obj, LV_OBJ_FREE_NUM_TYPE free_num)
function lv_obj_set_free_ptr (line 1217) | void lv_obj_set_free_ptr(lv_obj_t * obj, void * free_p)
function lv_obj_animate (line 1232) | void lv_obj_animate(lv_obj_t * obj, lv_anim_builtin_t type, uint16_t tim...
function lv_obj_t (line 1316) | lv_obj_t * lv_scr_act(void)
function lv_obj_t (line 1325) | lv_obj_t * lv_layer_top(void)
function lv_obj_t (line 1335) | lv_obj_t * lv_layer_sys(void)
function lv_obj_t (line 1345) | lv_obj_t * lv_obj_get_screen(const lv_obj_t * obj)
function lv_obj_t (line 1367) | lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj)
function lv_obj_t (line 1379) | lv_obj_t * lv_obj_get_child(const lv_obj_t * obj, const lv_obj_t * child)
function lv_obj_t (line 1399) | lv_obj_t * lv_obj_get_child_back(const lv_obj_t * obj, const lv_obj_t * ...
function lv_obj_count_children (line 1417) | uint16_t lv_obj_count_children(const lv_obj_t * obj)
function lv_obj_get_coords (line 1436) | void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * cords_p)
function lv_coord_t (line 1447) | lv_coord_t lv_obj_get_x(const lv_obj_t * obj)
function lv_coord_t (line 1461) | lv_coord_t lv_obj_get_y(const lv_obj_t * obj)
function lv_coord_t (line 1475) | lv_coord_t lv_obj_get_width(const lv_obj_t * obj)
function lv_coord_t (line 1485) | lv_coord_t lv_obj_get_height(const lv_obj_t * obj)
function lv_coord_t (line 1495) | lv_coord_t lv_obj_get_ext_size(const lv_obj_t * obj)
function lv_obj_get_auto_realign (line 1505) | bool lv_obj_get_auto_realign(lv_obj_t * obj)
function lv_style_t (line 1524) | lv_style_t * lv_obj_get_style(const lv_obj_t * obj)
function lv_obj_get_hidden (line 1572) | bool lv_obj_get_hidden(const lv_obj_t * obj)
function lv_obj_get_click (line 1582) | bool lv_obj_get_click(const lv_obj_t * obj)
function lv_obj_get_top (line 1592) | bool lv_obj_get_top(const lv_obj_t * obj)
function lv_obj_get_drag (line 1602) | bool lv_obj_get_drag(const lv_obj_t * obj)
function lv_obj_get_drag_throw (line 1612) | bool lv_obj_get_drag_throw(const lv_obj_t * obj)
function lv_obj_get_drag_parent (line 1622) | bool lv_obj_get_drag_parent(const lv_obj_t * obj)
function lv_opa_t (line 1632) | lv_opa_t lv_obj_get_opa_scale_enable(const lv_obj_t * obj)
function lv_opa_t (line 1642) | lv_opa_t lv_obj_get_opa_scale(const lv_obj_t * obj)
function lv_obj_get_protect (line 1659) | uint8_t lv_obj_get_protect(const lv_obj_t * obj)
function lv_obj_is_protected (line 1670) | bool lv_obj_is_protected(const lv_obj_t * obj, uint8_t prot)
function lv_signal_func_t (line 1680) | lv_signal_func_t lv_obj_get_signal_func(const lv_obj_t * obj)
function lv_design_func_t (line 1690) | lv_design_func_t lv_obj_get_design_func(const lv_obj_t * obj)
function lv_obj_get_type (line 1716) | void lv_obj_get_type(lv_obj_t * obj, lv_obj_type_t * buf)
function LV_OBJ_FREE_NUM_TYPE (line 1744) | LV_OBJ_FREE_NUM_TYPE lv_obj_get_free_num(const lv_obj_t * obj)
function lv_obj_is_focused (line 1779) | bool lv_obj_is_focused(const lv_obj_t * obj)
function lv_obj_design (line 1802) | static bool lv_obj_design(lv_obj_t * obj, const lv_area_t * mask_p, lv_...
function lv_res_t (line 1844) | static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * p...
function refresh_children_position (line 1880) | static void refresh_children_position(lv_obj_t * obj, lv_coord_t x_diff,...
function report_style_mod_core (line 1898) | static void report_style_mod_core(void * style_p, lv_obj_t * obj)
function refresh_children_style (line 1916) | static void refresh_children_style(lv_obj_t * obj)
function delete_children (line 1935) | static void delete_children(lv_obj_t * obj)
FILE: bdk/libs/lvgl/lv_core/lv_obj.h
type _lv_obj_t (line 66) | struct _lv_obj_t
type lv_design_mode_t (line 74) | typedef uint8_t lv_design_mode_t;
type _lv_obj_t (line 76) | struct _lv_obj_t
type lv_res_t (line 83) | typedef uint8_t lv_res_t;
type lv_signal_t (line 114) | typedef uint8_t lv_signal_t;
type lv_res_t (line 116) | typedef lv_res_t (* lv_signal_func_t) (struct _lv_obj_t * obj, lv_signal...
type lv_align_t (line 142) | typedef uint8_t lv_align_t;
type lv_reailgn_t (line 145) | typedef struct {
type lv_obj_t (line 156) | typedef struct _lv_obj_t
type lv_res_t (line 197) | typedef lv_res_t (*lv_action_t) (struct _lv_obj_t * obj);
type lv_protect_t (line 210) | typedef uint8_t lv_protect_t;
type lv_obj_type_t (line 214) | typedef struct {
type lv_anim_builtin_t (line 228) | typedef uint8_t lv_anim_builtin_t;
FILE: bdk/libs/lvgl/lv_core/lv_refr.c
type lv_join_t (line 27) | typedef struct {
function lv_refr_init (line 68) | void lv_refr_init(void)
function lv_refr_now (line 84) | void lv_refr_now(void)
function lv_inv_area (line 94) | void lv_inv_area(const lv_area_t * area_p)
function lv_refr_set_monitor_cb (line 141) | void lv_refr_set_monitor_cb(void (*cb)(uint32_t, uint32_t))
function lv_refr_set_round_cb (line 151) | void lv_refr_set_round_cb(void(*cb)(lv_area_t *))
function lv_refr_get_buf_size (line 160) | uint16_t lv_refr_get_buf_size(void)
function lv_refr_pop_from_buf (line 169) | void lv_refr_pop_from_buf(uint16_t num)
function lv_refr_task (line 183) | static void lv_refr_task(void * param)
function lv_refr_join_area (line 256) | static void lv_refr_join_area(void)
function lv_refr_areas (line 295) | static void lv_refr_areas(void)
function lv_refr_area_no_vdb (line 321) | static void lv_refr_area_no_vdb(const lv_area_t * area_p)
function lv_refr_area_with_vdb (line 342) | static void lv_refr_area_with_vdb(const lv_area_t * area_p)
function lv_refr_area_part_vdb (line 434) | static void lv_refr_area_part_vdb(const lv_area_t * area_p)
function lv_obj_t (line 474) | static lv_obj_t * lv_refr_get_top_obj(const lv_area_t * area_p, lv_obj_t...
function lv_refr_obj_and_children (line 509) | static void lv_refr_obj_and_children(lv_obj_t * top_p, const lv_area_t *...
function lv_refr_obj (line 557) | static void lv_refr_obj(lv_obj_t * obj, const lv_area_t * mask_ori_p)
FILE: bdk/libs/lvgl/lv_core/lv_style.c
type lv_style_anim_dsc_t (line 37) | typedef struct {
function lv_style_init (line 81) | void lv_style_init(void)
function lv_style_copy (line 224) | void lv_style_copy(lv_style_t * dest, const lv_style_t * src)
function lv_style_mix (line 237) | void lv_style_mix(const lv_style_t * start, const lv_style_t * end, lv_s...
function style_animator (line 332) | static void style_animator(lv_style_anim_dsc_t * dsc, int32_t val)
function style_animation_common_end_cb (line 348) | static void style_animation_common_end_cb(void * ptr)
FILE: bdk/libs/lvgl/lv_core/lv_style.h
type lv_border_part_t (line 41) | typedef uint8_t lv_border_part_t;
type lv_shadow_type_t (line 49) | typedef uint8_t lv_shadow_type_t;
type lv_style_t (line 51) | typedef struct
type lv_style_anim_t (line 107) | typedef struct {
FILE: bdk/libs/lvgl/lv_core/lv_vdb.c
function lv_vdb_t (line 79) | lv_vdb_t * lv_vdb_get(void)
function lv_vdb_flush (line 96) | void lv_vdb_flush(void)
function lv_vdb_set_adr (line 135) | void lv_vdb_set_adr(void * buf1, void * buf2)
function LV_ATTRIBUTE_FLUSH_READY (line 149) | LV_ATTRIBUTE_FLUSH_READY void lv_flush_ready(void)
function lv_vdb_t (line 163) | lv_vdb_t * lv_vdb_get_active(void)
function lv_vdb_t (line 176) | lv_vdb_t * lv_vdb_get_inactive(void)
function lv_vdb_is_flushing (line 189) | bool lv_vdb_is_flushing(void)
function lv_flush_ready (line 203) | void lv_flush_ready(void)
FILE: bdk/libs/lvgl/lv_core/lv_vdb.h
type lv_vdb_t (line 53) | typedef struct
FILE: bdk/libs/lvgl/lv_draw/lv_draw.c
function lv_opa_t (line 72) | lv_opa_t lv_draw_aa_get_opa(lv_coord_t seg, lv_coord_t px_id, lv_opa_t b...
function lv_draw_aa_ver_seg (line 122) | void lv_draw_aa_ver_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, c...
function lv_draw_aa_hor_seg (line 147) | void lv_draw_aa_hor_seg(lv_coord_t x, lv_coord_t y, lv_coord_t length, c...
FILE: bdk/libs/lvgl/lv_draw/lv_draw.h
type lv_img_src_t (line 47) | typedef uint8_t lv_img_src_t;
FILE: bdk/libs/lvgl/lv_draw/lv_draw_arc.c
function lv_draw_arc (line 52) | void lv_draw_arc(lv_coord_t center_x, lv_coord_t center_y, uint16_t radi...
function fast_atan2 (line 159) | static uint16_t fast_atan2(int x, int y)
function ver_line (line 237) | static void ver_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask,...
function hor_line (line 245) | static void hor_line(lv_coord_t x, lv_coord_t y, const lv_area_t * mask,...
function deg_test_norm (line 253) | static bool deg_test_norm(uint16_t deg, uint16_t start, uint16_t end)
function deg_test_inv (line 259) | static bool deg_test_inv(uint16_t deg, uint16_t start, uint16_t end)
FILE: bdk/libs/lvgl/lv_draw/lv_draw_img.c
function lv_draw_img (line 68) | void lv_draw_img(const lv_area_t * coords, const lv_area_t * mask,
function lv_res_t (line 97) | lv_res_t lv_img_dsc_get_info(const char * src, lv_img_header_t * header)
function lv_img_color_format_get_px_size (line 148) | uint8_t lv_img_color_format_get_px_size(lv_img_cf_t cf)
function lv_img_color_format_is_chroma_keyed (line 188) | bool lv_img_color_format_is_chroma_keyed(lv_img_cf_t cf)
function lv_img_color_format_has_alpha (line 210) | bool lv_img_color_format_has_alpha(lv_img_cf_t cf)
function lv_img_src_t (line 239) | lv_img_src_t lv_img_src_get_type(const void * src)
function lv_img_decoder_set_custom (line 269) | void lv_img_decoder_set_custom(lv_img_decoder_info_f_t info_fp, lv_img_...
function lv_res_t (line 284) | static lv_res_t lv_img_draw_core(const lv_area_t * coords, const lv_area...
function lv_res_t (line 466) | static lv_res_t lv_img_decoder_read_line(lv_coord_t x, lv_coord_t y, lv_...
function lv_img_decoder_close (line 544) | static void lv_img_decoder_close(void)
function lv_res_t (line 564) | static lv_res_t lv_img_built_in_decoder_line_alpha(lv_coord_t x, lv_coor...
function lv_res_t (line 676) | static lv_res_t lv_img_built_in_decoder_line_indexed(lv_coord_t x, lv_co...
FILE: bdk/libs/lvgl/lv_draw/lv_draw_img.h
type _lv_img_t (line 27) | struct _lv_img_t
type lv_img_header_t (line 29) | typedef struct {
type lv_img_cf_t (line 64) | typedef uint8_t lv_img_cf_t;
type lv_img_dsc_t (line 68) | typedef struct
type lv_res_t (line 84) | typedef lv_res_t (*lv_img_decoder_info_f_t)(const void * src, lv_img_hea...
type lv_res_t (line 106) | typedef lv_res_t (*lv_img_decoder_read_line_f_t)(lv_coord_t x, lv_coord_...
FILE: bdk/libs/lvgl/lv_draw/lv_draw_label.c
type cmd_state_t (line 26) | typedef uint8_t cmd_state_t;
function lv_draw_label (line 57) | void lv_draw_label(const lv_area_t * coords, const lv_area_t * mask, con...
function hex_char_to_num (line 228) | static uint8_t hex_char_to_num(char hex)
FILE: bdk/libs/lvgl/lv_draw/lv_draw_line.c
type line_draw_t (line 24) | typedef struct {
type line_width_t (line 37) | typedef struct {
function lv_draw_line (line 74) | void lv_draw_line(const lv_point_t * point1, const lv_point_t * point2, ...
function line_draw_hor (line 176) | static void line_draw_hor(line_draw_t * main_line, const lv_area_t * mas...
function line_draw_ver (line 197) | static void line_draw_ver(line_draw_t * main_line, const lv_area_t * mas...
function line_draw_skew (line 219) | static void line_draw_skew(line_draw_t * main_line, bool dir_ori, const ...
function line_init (line 540) | static void line_init(line_draw_t * line, const lv_point_t * p1, const l...
function line_next (line 559) | static bool line_next(line_draw_t * line)
function line_next_y (line 579) | static bool line_next_y(line_draw_t * line)
function line_next_x (line 596) | static bool line_next_x(line_draw_t * line)
FILE: bdk/libs/lvgl/lv_draw/lv_draw_rbasic.c
function lv_rpx (line 49) | void lv_rpx(lv_coord_t x, lv_coord_t y, const lv_area_t * mask_p, lv_col...
function lv_rfill (line 69) | void lv_rfill(const lv_area_t * cords_p, const lv_area_t * mask_p,
function lv_rletter (line 100) | void lv_rletter(const lv_point_t * pos_p, const lv_area_t * mask_p,
function lv_rletter_set_background (line 199) | void lv_rletter_set_background(lv_color_t color)
function lv_rmap (line 215) | void lv_rmap(const lv_area_t * cords_p, const lv_area_t * mask_p,
FILE: bdk/libs/lvgl/lv_draw/lv_draw_rect.c
function lv_draw_rect (line 65) | void lv_draw_rect(const lv_area_t * coords, const lv_area_t * mask, cons...
function lv_draw_rect_main_mid (line 102) | static void lv_draw_rect_main_mid(const lv_area_t * coords, const lv_are...
function lv_draw_rect_main_corner (line 171) | static void lv_draw_rect_main_corner(const lv_area_t * coords, const lv_...
function lv_draw_rect_border_straight (line 467) | static void lv_draw_rect_border_straight(const lv_area_t * coords, const...
function lv_draw_rect_border_corner (line 661) | static void lv_draw_rect_border_corner(const lv_area_t * coords, const l...
function lv_draw_shadow (line 1036) | static void lv_draw_shadow(const lv_area_t * coords, const lv_area_t * m...
function lv_draw_shadow_full (line 1064) | static void lv_draw_shadow_full(const lv_area_t * coords, const lv_area_...
function lv_draw_shadow_bottom (line 1236) | static void lv_draw_shadow_bottom(const lv_area_t * coords, const lv_are...
function lv_draw_shadow_full_straight (line 1334) | static void lv_draw_shadow_full_straight(const lv_area_t * coords, const...
function lv_draw_cont_radius_corr (line 1394) | static uint16_t lv_draw_cont_radius_corr(uint16_t r, lv_coord_t w, lv_co...
function lv_opa_t (line 1420) | static lv_opa_t antialias_get_opa_circ(lv_coord_t seg, lv_coord_t px_id,...
FILE: bdk/libs/lvgl/lv_draw/lv_draw_triangle.c
function lv_draw_triangle (line 43) | void lv_draw_triangle(const lv_point_t * points, const lv_area_t * mask,...
function point_swap (line 154) | static void point_swap(lv_point_t * p1, lv_point_t * p2)
FILE: bdk/libs/lvgl/lv_draw/lv_draw_vbasic.c
function lv_vpx (line 70) | void lv_vpx(lv_coord_t x, lv_coord_t y, const lv_area_t * mask_p, lv_col...
function lv_vfill (line 118) | void lv_vfill(const lv_area_t * cords_p, const lv_area_t * mask_p,
function lv_vletter (line 236) | void lv_vletter(const lv_point_t * pos_p, const lv_area_t * mask_p,
function lv_vmap (line 391) | void lv_vmap(const lv_area_t * cords_p, const lv_area_t * mask_p,
function sw_mem_blend (line 558) | static void sw_mem_blend(lv_color_t * dest, const lv_color_t * src, uint...
function sw_color_fill (line 578) | static void sw_color_fill(lv_area_t * mem_area, lv_color_t * mem, const ...
function lv_color_t (line 651) | static inline lv_color_t color_mix_2_alpha(lv_color_t bg_color, lv_opa_t...
FILE: bdk/libs/lvgl/lv_fonts/lv_font_builtin.c
function lv_font_builtin_init (line 54) | void lv_font_builtin_init(void)
FILE: bdk/libs/lvgl/lv_hal/lv_hal_disp.c
function lv_disp_drv_init (line 55) | void lv_disp_drv_init(lv_disp_drv_t * driver)
function lv_disp_t (line 77) | lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
function lv_disp_set_active (line 105) | void lv_disp_set_active(lv_disp_t * disp)
function lv_disp_t (line 115) | lv_disp_t * lv_disp_get_active(void)
function lv_disp_t (line 125) | lv_disp_t * lv_disp_next(lv_disp_t * disp)
function lv_disp_fill (line 143) | void lv_disp_fill(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_col...
function lv_disp_flush (line 157) | void lv_disp_flush(int32_t x1, int32_t y1, int32_t x2, int32_t y2, lv_co...
function lv_disp_map (line 179) | void lv_disp_map(int32_t x1, int32_t y1, int32_t x2, int32_t y2, const l...
function lv_disp_mem_blend (line 195) | void lv_disp_mem_blend(lv_color_t * dest, const lv_color_t * src, uint32...
function lv_disp_mem_fill (line 209) | void lv_disp_mem_fill(lv_color_t * dest, uint32_t length, lv_color_t color)
function lv_disp_is_mem_blend_supported (line 219) | bool lv_disp_is_mem_blend_supported(void)
function lv_disp_is_mem_fill_supported (line 230) | bool lv_disp_is_mem_fill_supported(void)
FILE: bdk/libs/lvgl/lv_hal/lv_hal_disp.h
type lv_disp_drv_t (line 34) | typedef struct _disp_drv_t {
type lv_disp_t (line 59) | typedef struct _disp_t {
FILE: bdk/libs/lvgl/lv_hal/lv_hal_indev.c
function lv_indev_drv_init (line 50) | void lv_indev_drv_init(lv_indev_drv_t * driver)
function lv_indev_t (line 62) | lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
function lv_indev_t (line 96) | lv_indev_t * lv_indev_next(lv_indev_t * indev)
function lv_indev_read (line 113) | bool lv_indev_read(lv_indev_t * indev, lv_indev_data_t * data)
FILE: bdk/libs/lvgl/lv_hal/lv_hal_indev.h
type lv_hal_indev_type_t (line 40) | typedef uint8_t lv_hal_indev_type_t;
type lv_indev_state_t (line 47) | typedef uint8_t lv_indev_state_t;
type lv_indev_data_t (line 50) | typedef struct {
type lv_indev_drv_t (line 62) | typedef struct {
type _lv_obj_t (line 68) | struct _lv_obj_t
type lv_indev_proc_t (line 71) | typedef struct _lv_indev_proc_t {
type _lv_indev_t (line 102) | struct _lv_indev_t
type _lv_indev_t (line 104) | struct _lv_indev_t
type _lv_obj_t (line 106) | struct _lv_obj_t
type _lv_group_t (line 107) | struct _lv_group_t
type lv_indev_t (line 110) | typedef struct _lv_indev_t {
FILE: bdk/libs/lvgl/lv_hal/lv_hal_tick.c
function LV_ATTRIBUTE_TICK_INC (line 52) | LV_ATTRIBUTE_TICK_INC void lv_tick_inc(uint32_t tick_period)
function lv_tick_get (line 62) | uint32_t lv_tick_get(void)
function lv_tick_elaps (line 82) | uint32_t lv_tick_elaps(uint32_t prev_tick)
FILE: bdk/libs/lvgl/lv_misc/lv_anim.c
function lv_anim_init (line 57) | void lv_anim_init(void)
function lv_anim_create (line 68) | void lv_anim_create(lv_anim_t * anim_p)
function lv_anim_del (line 100) | bool lv_anim_del(void * var, lv_anim_fp_t fp)
function lv_anim_count_running (line 127) | uint16_t lv_anim_count_running(void)
function lv_anim_speed_to_time (line 143) | uint16_t lv_anim_speed_to_time(uint16_t speed, int32_t start, int32_t end)
function lv_anim_path_linear (line 162) | int32_t lv_anim_path_linear(const lv_anim_t * a)
function lv_anim_path_ease_in (line 184) | int32_t lv_anim_path_ease_in(const lv_anim_t * a)
function lv_anim_path_ease_out (line 207) | int32_t lv_anim_path_ease_out(const lv_anim_t * a)
function lv_anim_path_ease_in_out (line 231) | int32_t lv_anim_path_ease_in_out(const lv_anim_t * a)
function lv_anim_path_overshoot (line 255) | int32_t lv_anim_path_overshoot(const lv_anim_t * a)
function lv_anim_path_bounce (line 279) | int32_t lv_anim_path_bounce(const lv_anim_t * a)
function lv_anim_path_step (line 341) | int32_t lv_anim_path_step(const lv_anim_t * a)
function anim_task (line 355) | static void anim_task(void * param)
function anim_ready_handler (line 406) | static bool anim_ready_handler(lv_anim_t * a)
FILE: bdk/libs/lvgl/lv_misc/lv_anim.h
type _lv_anim_t (line 35) | struct _lv_anim_t
type _lv_anim_t (line 37) | struct _lv_anim_t
type lv_anim_t (line 42) | typedef struct _lv_anim_t
FILE: bdk/libs/lvgl/lv_misc/lv_area.c
function lv_area_set (line 44) | void lv_area_set(lv_area_t * area_p, lv_coord_t x1, lv_coord_t y1, lv_co...
function lv_area_set_width (line 57) | void lv_area_set_width(lv_area_t * area_p, lv_coord_t w)
function lv_area_set_height (line 67) | void lv_area_set_height(lv_area_t * area_p, lv_coord_t h)
function lv_area_set_pos (line 78) | void lv_area_set_pos(lv_area_t * area_p, lv_coord_t x, lv_coord_t y)
function lv_area_get_size (line 93) | uint32_t lv_area_get_size(const lv_area_t * area_p)
function lv_area_intersect (line 110) | bool lv_area_intersect(lv_area_t * res_p, const lv_area_t * a1_p, const ...
function lv_area_join (line 133) | void lv_area_join(lv_area_t * a_res_p, const lv_area_t * a1_p, const lv_...
function lv_area_is_point_on (line 147) | bool lv_area_is_point_on(const lv_area_t * a_p, const lv_point_t * p_p)
function lv_area_is_on (line 165) | bool lv_area_is_on(const lv_area_t * a1_p, const lv_area_t * a2_p)
function lv_area_is_in (line 184) | bool lv_area_is_in(const lv_area_t * ain_p, const lv_area_t * aholder_p)
FILE: bdk/libs/lvgl/lv_misc/lv_area.h
type lv_coord_t (line 29) | typedef int16_t lv_coord_t;
type lv_point_t (line 31) | typedef struct
type lv_area_t (line 37) | typedef struct
function lv_area_copy (line 64) | inline static void lv_area_copy(lv_area_t * dest, const lv_area_t * src)
function lv_coord_t (line 74) | static inline lv_coord_t lv_area_get_width(const lv_area_t * area_p)
function lv_coord_t (line 84) | static inline lv_coord_t lv_area_get_height(const lv_area_t * area_p)
FILE: bdk/libs/lvgl/lv_misc/lv_circ.c
function lv_circ_init (line 43) | void lv_circ_init(lv_point_t * c, lv_coord_t * tmp, lv_coord_t radius)
function lv_circ_cont (line 55) | bool lv_circ_cont(lv_point_t * c)
function lv_circ_next (line 65) | void lv_circ_next(lv_point_t * c, lv_coord_t * tmp)
FILE: bdk/libs/lvgl/lv_misc/lv_color.c
function lv_color_t (line 64) | lv_color_t lv_color_hsv_to_rgb(uint16_t hue, uint8_t sat, uint8_t val)
function lv_color_hsv_t (line 138) | lv_color_hsv_t lv_color_rgb_to_hsv(uint8_t r, uint8_t g, uint8_t b)
FILE: bdk/libs/lvgl/lv_misc/lv_color.h
type lv_color1_t (line 111) | typedef union
type lv_color8_t (line 119) | typedef union
type lv_color16_t (line 130) | typedef union
type lv_color32_t (line 148) | typedef union
type lv_color_int_t (line 161) | typedef uint8_t lv_color_int_t;
type lv_color1_t (line 162) | typedef lv_color1_t lv_color_t;
type lv_color_int_t (line 164) | typedef uint8_t lv_color_int_t;
type lv_color8_t (line 165) | typedef lv_color8_t lv_color_t;
type lv_color_int_t (line 167) | typedef uint16_t lv_color_int_t;
type lv_color16_t (line 168) | typedef lv_color16_t lv_color_t;
type lv_color_int_t (line 170) | typedef uint32_t lv_color_int_t;
type lv_color32_t (line 171) | typedef lv_color32_t lv_color_t;
type lv_opa_t (line 176) | typedef uint8_t lv_opa_t;
type lv_color_hsv_t (line 178) | typedef struct
function lv_color_to8 (line 241) | static inline uint8_t lv_color_to8(lv_color_t color)
function lv_color_to16 (line 272) | static inline uint16_t lv_color_to16(lv_color_t color)
function lv_color_to32 (line 309) | static inline uint32_t lv_color_to32(lv_color_t color)
function lv_color_t (line 342) | static inline lv_color_t lv_color_mix(const lv_color_t c1, const lv_colo...
function lv_color_brightness (line 378) | static inline uint8_t lv_color_brightness(lv_color_t color)
FILE: bdk/libs/lvgl/lv_misc/lv_font.c
function lv_font_init (line 44) | void lv_font_init(void)
function lv_font_add (line 54) | void lv_font_add(lv_font_t * child, lv_font_t * parent)
function lv_font_remove (line 71) | void lv_font_remove(lv_font_t * child, lv_font_t * parent)
function lv_font_is_monospace (line 90) | bool lv_font_is_monospace(const lv_font_t * font_p, uint32_t letter)
function lv_font_get_width (line 133) | uint8_t lv_font_get_width(const lv_font_t * font_p, uint32_t letter)
function lv_font_get_real_width (line 159) | uint8_t lv_font_get_real_width(const lv_font_t * font_p, uint32_t letter)
function lv_font_get_bpp (line 179) | uint8_t lv_font_get_bpp(const lv_font_t * font, uint32_t letter)
function lv_font_get_width_continuous (line 235) | int16_t lv_font_get_width_continuous(const lv_font_t * font, uint32_t un...
function lv_font_get_width_sparse (line 252) | int16_t lv_font_get_width_sparse(const lv_font_t * font, uint32_t unicod...
FILE: bdk/libs/lvgl/lv_misc/lv_font.h
type lv_font_glyph_dsc_t (line 36) | typedef struct
type lv_font_unicode_map_t (line 42) | typedef struct
type lv_font_t (line 48) | typedef struct _lv_font_struct
function lv_font_get_height (line 125) | static inline uint8_t lv_font_get_height(const lv_font_t * font_p)
FILE: bdk/libs/lvgl/lv_misc/lv_fs.c
function lv_fs_init (line 58) | void lv_fs_init(void)
function lv_fs_is_ready (line 68) | bool lv_fs_is_ready(char letter)
function lv_fs_res_t (line 86) | lv_fs_res_t lv_fs_open(lv_fs_file_t * file_p, const char * path, lv_fs_m...
function lv_fs_res_t (line 138) | lv_fs_res_t lv_fs_close(lv_fs_file_t * file_p)
function lv_fs_res_t (line 163) | lv_fs_res_t lv_fs_remove(const char * path)
function lv_fs_res_t (line 192) | lv_fs_res_t lv_fs_read(lv_fs_file_t * file_p, void * buf, uint32_t btr, ...
function lv_fs_res_t (line 213) | lv_fs_res_t lv_fs_write(lv_fs_file_t * file_p, const void * buf, uint32_...
function lv_fs_res_t (line 238) | lv_fs_res_t lv_fs_seek(lv_fs_file_t * file_p, uint32_t pos)
function lv_fs_res_t (line 259) | lv_fs_res_t lv_fs_tell(lv_fs_file_t * file_p, uint32_t * pos)
function lv_fs_res_t (line 282) | lv_fs_res_t lv_fs_trunc(lv_fs_file_t * file_p)
function lv_fs_res_t (line 302) | lv_fs_res_t lv_fs_size(lv_fs_file_t * file_p, uint32_t * size)
function lv_fs_res_t (line 324) | lv_fs_res_t lv_fs_rename(const char * oldname, const char * newname)
function lv_fs_res_t (line 358) | lv_fs_res_t lv_fs_dir_open(lv_fs_dir_t * rddir_p, const char * path)
function lv_fs_res_t (line 395) | lv_fs_res_t lv_fs_dir_read(lv_fs_dir_t * rddir_p, char * fn)
function lv_fs_res_t (line 416) | lv_fs_res_t lv_fs_dir_close(lv_fs_dir_t * rddir_p)
function lv_fs_res_t (line 445) | lv_fs_res_t lv_fs_free(char letter, uint32_t * total_p, uint32_t * free_p)
function lv_fs_add_drv (line 474) | void lv_fs_add_drv(lv_fs_drv_t * drv_p)
function lv_fs_drv_t (line 614) | static lv_fs_drv_t * lv_fs_get_drv(char letter)
FILE: bdk/libs/lvgl/lv_misc/lv_fs.h
type lv_fs_res_t (line 51) | typedef uint8_t lv_fs_res_t;
type __lv_fs_drv_t (line 53) | struct __lv_fs_drv_t
type lv_fs_file_t (line 55) | typedef struct
type lv_fs_dir_t (line 62) | typedef struct
type lv_fs_mode_t (line 73) | typedef uint8_t lv_fs_mode_t;
type lv_fs_drv_t (line 75) | typedef struct __lv_fs_drv_t
FILE: bdk/libs/lvgl/lv_misc/lv_ll.c
function lv_ll_init (line 50) | void lv_ll_init(lv_ll_t * ll_p, uint32_t node_size)
function lv_ll_rem (line 164) | void lv_ll_rem(lv_ll_t * ll_p, void * node_p)
function lv_ll_clear (line 195) | void lv_ll_clear(lv_ll_t * ll_p)
function lv_ll_chg_list (line 220) | bool lv_ll_chg_list(lv_ll_t * ll_ori_p, lv_ll_t * ll_new_p, void * node)
function lv_ll_swap (line 310) | void lv_ll_swap(lv_ll_t * ll_p, void * n1_p, void * n2_p)
function lv_ll_move_before (line 324) | void lv_ll_move_before(lv_ll_t * ll_p, void * n_act, void * n_after)
function node_set_prev (line 358) | static void node_set_prev(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node...
function node_set_next (line 373) | static void node_set_next(lv_ll_t * ll_p, lv_ll_node_t * act, lv_ll_node...
FILE: bdk/libs/lvgl/lv_misc/lv_ll.h
type lv_ll_node_t (line 30) | typedef uint8_t lv_ll_node_t;
type lv_ll_t (line 33) | typedef struct
FILE: bdk/libs/lvgl/lv_misc/lv_log.c
function lv_log_register_print (line 48) | void lv_log_register_print(void f(lv_log_level_t, const char *, uint32_t...
function lv_log_add (line 60) | void lv_log_add(lv_log_level_t level, const char * file, int line, const...
FILE: bdk/libs/lvgl/lv_misc/lv_log.h
type lv_log_level_t (line 35) | typedef int8_t lv_log_level_t;
FILE: bdk/libs/lvgl/lv_misc/lv_math.c
function lv_trigo_sin (line 111) | int16_t lv_trigo_sin(int16_t angle)
function lv_bezier3 (line 143) | int32_t lv_bezier3(uint32_t t, int32_t u0, int32_t u1, int32_t u2, int32...
FILE: bdk/libs/lvgl/lv_misc/lv_mem.c
type lv_mem_header_t (line 56) | typedef union {
type lv_mem_ent_t (line 67) | typedef struct {
function lv_mem_init (line 103) | void lv_mem_init(void)
function lv_mem_free (line 184) | void lv_mem_free(const void * data)
function lv_mem_defrag (line 294) | void lv_mem_defrag(void)
function lv_mem_monitor (line 338) | void lv_mem_monitor(lv_mem_monitor_t * mon_p)
function lv_mem_get_size (line 376) | uint32_t lv_mem_get_size(const void * data)
function lv_mem_get_size (line 388) | uint32_t lv_mem_get_size(const void * data)
function lv_mem_ent_t (line 405) | static lv_mem_ent_t * ent_get_next(lv_mem_ent_t * act_e)
function ent_trunc (line 451) | static void ent_trunc(lv_mem_ent_t * e, uint32_t size)
FILE: bdk/libs/lvgl/lv_misc/lv_mem.h
type lv_mem_monitor_t (line 46) | typedef struct
FILE: bdk/libs/lvgl/lv_misc/lv_task.c
function lv_task_init (line 52) | void lv_task_init(void)
function LV_ATTRIBUTE_TASK_HANDLER (line 63) | LV_ATTRIBUTE_TASK_HANDLER void lv_task_handler(void)
function lv_task_t (line 164) | lv_task_t * lv_task_create(void (*task)(void *), uint32_t period, lv_tas...
function lv_task_del (line 209) | void lv_task_del(lv_task_t * lv_task_p)
function lv_task_set_prio (line 223) | void lv_task_set_prio(lv_task_t * lv_task_p, lv_task_prio_t prio)
function lv_task_set_period (line 248) | void lv_task_set_period(lv_task_t * lv_task_p, uint32_t period)
function lv_task_ready (line 257) | void lv_task_ready(lv_task_t * lv_task_p)
function lv_task_once (line 266) | void lv_task_once(lv_task_t * lv_task_p)
function lv_task_reset (line 276) | void lv_task_reset(lv_task_t * lv_task_p)
function lv_task_enable (line 285) | void lv_task_enable(bool en)
function lv_task_get_idle (line 294) | uint8_t lv_task_get_idle(void)
function lv_task_exec (line 309) | static bool lv_task_exec(lv_task_t * lv_task_p)
FILE: bdk/libs/lvgl/lv_misc/lv_task.h
type lv_task_prio_t (line 50) | typedef uint8_t lv_task_prio_t;
type lv_task_t (line 55) | typedef struct
FILE: bdk/libs/lvgl/lv_misc/lv_txt.c
function lv_txt_get_size (line 103) | void lv_txt_get_size(lv_point_t * size_res, const char * text, const lv_...
function lv_txt_get_next_line (line 153) | uint16_t lv_txt_get_next_line(const char * txt, const lv_font_t * font,
function lv_coord_t (line 305) | lv_coord_t lv_txt_get_width(const char * txt, uint16_t length,
function lv_txt_is_cmd (line 348) | bool lv_txt_is_cmd(lv_txt_cmd_state_t * state, uint32_t c)
function lv_txt_ins (line 382) | void lv_txt_ins(char * txt_buf, uint32_t pos, const char * ins_txt)
function lv_txt_cut (line 406) | void lv_txt_cut(char * txt, uint32_t pos, uint32_t len)
function lv_txt_utf8_size (line 434) | static uint8_t lv_txt_utf8_size(const char * str)
function lv_txt_unicode_to_utf8 (line 449) | static uint32_t lv_txt_unicode_to_utf8(uint32_t letter_uni)
function lv_txt_utf8_conv_wc (line 480) | static uint32_t lv_txt_utf8_conv_wc(uint32_t c)
function lv_txt_utf8_next (line 506) | static uint32_t lv_txt_utf8_next(const char * txt, uint32_t * i)
function lv_txt_utf8_prev (line 578) | static uint32_t lv_txt_utf8_prev(const char * txt, uint32_t * i)
function lv_txt_utf8_get_byte_id (line 610) | static uint32_t lv_txt_utf8_get_byte_id(const char * txt, uint32_t utf8_id)
function lv_txt_utf8_get_char_id (line 630) | static uint32_t lv_txt_utf8_get_char_id(const char * txt, uint32_t byte_id)
function lv_txt_utf8_get_length (line 649) | static uint32_t lv_txt_utf8_get_length(const char * txt)
function lv_txt_ascii_size (line 672) | static uint8_t lv_txt_ascii_size(const char * str)
function lv_txt_unicode_to_ascii (line 683) | static uint32_t lv_txt_unicode_to_ascii(uint32_t letter_uni)
function lv_txt_ascii_conv_wc (line 695) | static uint32_t lv_txt_ascii_conv_wc(uint32_t c)
function lv_txt_ascii_next (line 708) | static uint32_t lv_txt_ascii_next(const char * txt, uint32_t * i)
function lv_txt_ascii_prev (line 723) | static uint32_t lv_txt_ascii_prev(const char * txt, uint32_t * i)
function lv_txt_ascii_get_byte_id (line 740) | static uint32_t lv_txt_ascii_get_byte_id(const char * txt, uint32_t utf8...
function lv_txt_ascii_get_char_id (line 753) | static uint32_t lv_txt_ascii_get_char_id(const char * txt, uint32_t byte...
function lv_txt_ascii_get_length (line 764) | static uint32_t lv_txt_ascii_get_length(const char * txt)
function is_break_char (line 778) | static bool is_break_char(uint32_t letter)
FILE: bdk/libs/lvgl/lv_misc/lv_txt.h
type lv_txt_flag_t (line 42) | typedef uint8_t lv_txt_flag_t;
type lv_txt_cmd_state_t (line 50) | typedef uint8_t lv_txt_cmd_state_t;
FILE: bdk/libs/lvgl/lv_misc/lv_ufs.c
function lv_ufs_init (line 54) | void lv_ufs_init(void)
function lv_ufs_ready (line 90) | bool lv_ufs_ready(void)
function lv_fs_res_t (line 103) | lv_fs_res_t lv_ufs_open(void * file_p, const char * fn, lv_fs_mode_t mode)
function lv_fs_res_t (line 145) | lv_fs_res_t lv_ufs_create_const(const char * fn, const void * const_p, u...
function lv_fs_res_t (line 182) | lv_fs_res_t lv_ufs_close(void * file_p)
function lv_fs_res_t (line 202) | lv_fs_res_t lv_ufs_remove(const char * fn)
function lv_fs_res_t (line 232) | lv_fs_res_t lv_ufs_read(void * file_p, void * buf, uint32_t btr, uint32_...
function lv_fs_res_t (line 277) | lv_fs_res_t lv_ufs_write(void * file_p, const void * buf, uint32_t btw, ...
function lv_fs_res_t (line 314) | lv_fs_res_t lv_ufs_seek(void * file_p, uint32_t pos)
function lv_fs_res_t (line 344) | lv_fs_res_t lv_ufs_tell(void * file_p, uint32_t * pos_p)
function lv_fs_res_t (line 359) | lv_fs_res_t lv_ufs_trunc(void * file_p)
function lv_fs_res_t (line 383) | lv_fs_res_t lv_ufs_size(void * file_p, uint32_t * size_p)
function lv_fs_res_t (line 399) | lv_fs_res_t lv_ufs_dir_open(void * rddir_p, const char * path)
function lv_fs_res_t (line 415) | lv_fs_res_t lv_ufs_dir_read(void * dir_p, char * fn)
function lv_fs_res_t (line 439) | lv_fs_res_t lv_ufs_dir_close(void * rddir_p)
function lv_fs_res_t (line 451) | lv_fs_res_t lv_ufs_free(uint32_t * total_p, uint32_t * free_p)
function lv_ufs_ent_t (line 476) | static lv_ufs_ent_t * lv_ufs_ent_get(const char * fn)
function lv_ufs_ent_t (line 495) | static lv_ufs_ent_t * lv_ufs_ent_new(const char * fn)
FILE: bdk/libs/lvgl/lv_misc/lv_ufs.h
type lv_ufs_ent_t (line 38) | typedef struct
type lv_ufs_file_t (line 49) | typedef struct
type lv_ufs_dir_t (line 59) | typedef struct
FILE: bdk/libs/lvgl/lv_objx/lv_arc.c
function lv_obj_t (line 52) | lv_obj_t * lv_arc_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_arc_set_angles (line 123) | void lv_arc_set_angles(lv_obj_t * arc, uint16_t start, uint16_t end)
function lv_arc_set_style (line 142) | void lv_arc_set_style(lv_obj_t * arc, lv_arc_style_t type, lv_style_t * ...
function lv_arc_get_angle_start (line 160) | uint16_t lv_arc_get_angle_start(lv_obj_t * arc)
function lv_arc_get_angle_end (line 172) | uint16_t lv_arc_get_angle_end(lv_obj_t * arc)
function lv_style_t (line 185) | lv_style_t * lv_arc_get_style(const lv_obj_t * arc, lv_arc_style_t type)
function lv_arc_design (line 223) | static bool lv_arc_design(lv_obj_t * arc, const lv_area_t * mask, lv_des...
function lv_res_t (line 287) | static lv_res_t lv_arc_signal(lv_obj_t * arc, lv_signal_t sign, void * p...
FILE: bdk/libs/lvgl/lv_objx/lv_arc.h
type lv_arc_ext_t (line 35) | typedef struct {
type lv_arc_style_t (line 46) | typedef uint8_t lv_arc_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_bar.c
function lv_obj_t (line 53) | lv_obj_t * lv_bar_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_bar_set_value (line 119) | void lv_bar_set_value(lv_obj_t * bar, int16_t value)
function lv_bar_set_value_anim (line 136) | void lv_bar_set_value_anim(lv_obj_t * bar, int16_t value, uint16_t anim_...
function lv_bar_set_range (line 170) | void lv_bar_set_range(lv_obj_t * bar, int16_t min, int16_t max)
function lv_bar_set_sym (line 193) | void lv_bar_set_sym(lv_obj_t * bar, bool en)
function lv_bar_set_style (line 205) | void lv_bar_set_style(lv_obj_t * bar, lv_bar_style_t type, lv_style_t * ...
function lv_bar_get_value (line 229) | int16_t lv_bar_get_value(const lv_obj_t * bar)
function lv_bar_get_min_value (line 240) | int16_t lv_bar_get_min_value(const lv_obj_t * bar)
function lv_bar_get_max_value (line 251) | int16_t lv_bar_get_max_value(const lv_obj_t * bar)
function lv_bar_get_sym (line 262) | bool lv_bar_get_sym(lv_obj_t * bar)
function lv_style_t (line 274) | lv_style_t * lv_bar_get_style(const lv_obj_t * bar, lv_bar_style_t type)
function lv_bar_design (line 308) | static bool lv_bar_design(lv_obj_t * bar, const lv_area_t * mask, lv_des...
function lv_res_t (line 405) | static lv_res_t lv_bar_signal(lv_obj_t * bar, lv_signal_t sign, void * p...
FILE: bdk/libs/lvgl/lv_objx/lv_bar.h
type lv_bar_ext_t (line 38) | typedef struct
type lv_bar_style_t (line 53) | typedef uint8_t lv_bar_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_btn.c
function lv_obj_t (line 72) | lv_obj_t * lv_btn_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_btn_set_toggle (line 167) | void lv_btn_set_toggle(lv_obj_t * btn, bool tgl)
function lv_btn_set_state (line 179) | void lv_btn_set_state(lv_obj_t * btn, lv_btn_state_t state)
function lv_btn_toggle (line 192) | void lv_btn_toggle(lv_obj_t * btn)
function lv_btn_set_action (line 218) | void lv_btn_set_action(lv_obj_t * btn, lv_btn_action_t type, lv_action_t...
function lv_btn_set_ink_in_time (line 231) | void lv_btn_set_ink_in_time(lv_obj_t * btn, uint16_t time)
function lv_btn_set_ink_wait_time (line 248) | void lv_btn_set_ink_wait_time(lv_obj_t * btn, uint16_t time)
function lv_btn_set_ink_out_time (line 266) | void lv_btn_set_ink_out_time(lv_obj_t * btn, uint16_t time)
function lv_btn_set_style (line 284) | void lv_btn_set_style(lv_obj_t * btn, lv_btn_style_t type, lv_style_t * ...
function lv_btn_state_t (line 320) | lv_btn_state_t lv_btn_get_state(const lv_obj_t * btn)
function lv_btn_get_toggle (line 331) | bool lv_btn_get_toggle(const lv_obj_t * btn)
function lv_action_t (line 343) | lv_action_t lv_btn_get_action(const lv_obj_t * btn, lv_btn_action_t type)
function lv_btn_get_ink_in_time (line 356) | uint16_t lv_btn_get_ink_in_time(const lv_obj_t * btn)
function lv_btn_get_ink_wait_time (line 373) | uint16_t lv_btn_get_ink_wait_time(const lv_obj_t * btn)
function lv_btn_get_ink_out_time (line 388) | uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn)
function lv_style_t (line 405) | lv_style_t * lv_btn_get_style(const lv_obj_t * btn, lv_btn_style_t type)
function lv_btn_design (line 449) | static bool lv_btn_design(lv_obj_t * btn, const lv_area_t * mask, lv_des...
function lv_res_t (line 528) | static lv_res_t lv_btn_signal(lv_obj_t * btn, lv_signal_t sign, void * p...
function lv_btn_ink_effect_anim (line 718) | static void lv_btn_ink_effect_anim(lv_obj_t * btn, int32_t val)
function lv_btn_ink_effect_anim_ready (line 730) | static void lv_btn_ink_effect_anim_ready(void * p)
FILE: bdk/libs/lvgl/lv_objx/lv_btn.h
type lv_btn_state_t (line 51) | typedef uint8_t lv_btn_state_t;
type lv_btn_action_t (line 61) | typedef uint8_t lv_btn_action_t;
type lv_btn_ext_t (line 65) | typedef struct
type lv_btn_style_t (line 90) | typedef uint8_t lv_btn_style_t;
function lv_btn_set_layout (line 140) | static inline void lv_btn_set_layout(lv_obj_t * btn, lv_layout_t layout)
function lv_btn_set_fit (line 152) | static inline void lv_btn_set_fit(lv_obj_t * btn, bool hor_en, bool ver_en)
function lv_layout_t (line 216) | static inline lv_layout_t lv_btn_get_layout(const lv_obj_t * btn)
function lv_btn_get_hor_fit (line 226) | static inline bool lv_btn_get_hor_fit(const lv_obj_t * btn)
function lv_btn_get_ver_fit (line 236) | static inline bool lv_btn_get_ver_fit(const lv_obj_t * btn)
FILE: bdk/libs/lvgl/lv_objx/lv_btnm.c
function lv_obj_t (line 64) | lv_obj_t * lv_btnm_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_btnm_set_map (line 150) | void lv_btnm_set_map(lv_obj_t * btnm, const char ** map)
function lv_btnm_set_action (line 254) | void lv_btnm_set_action(lv_obj_t * btnm, lv_btnm_action_t action)
function lv_btnm_set_toggle (line 266) | void lv_btnm_set_toggle(lv_obj_t * btnm, bool en, uint16_t id)
function lv_btnm_set_style (line 287) | void lv_btnm_set_style(lv_obj_t * btnm, lv_btnm_style_t type, lv_style_t...
function lv_btnm_set_recolor (line 318) | void lv_btnm_set_recolor(const lv_obj_t * btnm, bool en)
function lv_btnm_action_t (line 346) | lv_btnm_action_t lv_btnm_get_action(const lv_obj_t * btnm)
function lv_btnm_get_pressed (line 357) | uint16_t lv_btnm_get_pressed(const lv_obj_t * btnm)
function lv_btnm_get_toggled (line 368) | uint16_t lv_btnm_get_toggled(const lv_obj_t * btnm)
function lv_style_t (line 382) | lv_style_t * lv_btnm_get_style(const lv_obj_t * btnm, lv_btnm_style_t type)
function lv_btnm_get_recolor (line 414) | bool lv_btnm_get_recolor(const lv_obj_t * btnm)
function lv_btnm_design (line 435) | static bool lv_btnm_design(lv_obj_t * btnm, const lv_area_t * mask, lv_d...
function lv_res_t (line 541) | static lv_res_t lv_btnm_signal(lv_obj_t * btnm, lv_signal_t sign, void *...
function allocate_btn_areas (line 742) | static void allocate_btn_areas(lv_obj_t * btnm, const char ** map)
function get_button_width (line 773) | static uint8_t get_button_width(const char * btn_str)
function button_is_hidden (line 782) | static bool button_is_hidden(const char * btn_str)
function button_is_repeat_disabled (line 793) | static bool button_is_repeat_disabled(const char * btn_str)
function button_is_inactive (line 804) | static bool button_is_inactive(const char * btn_str)
function get_button_from_point (line 829) | static uint16_t get_button_from_point(lv_obj_t * btnm, lv_point_t * p)
function get_button_text (line 859) | static uint16_t get_button_text(lv_obj_t * btnm, uint16_t btn_id)
FILE: bdk/libs/lvgl/lv_objx/lv_btnm.h
type lv_res_t (line 50) | typedef lv_res_t (*lv_btnm_action_t) (lv_obj_t *, const char *txt);
type lv_btnm_ext_t (line 53) | typedef struct
type lv_btnm_style_t (line 76) | typedef uint8_t lv_btnm_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_calendar.c
type day_draw_state_t (line 31) | typedef uint8_t day_draw_state_t;
function lv_obj_t (line 77) | lv_obj_t * lv_calendar_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_calendar_set_action (line 206) | void lv_calendar_set_action(lv_obj_t * calendar, lv_calendar_action_t ty...
function lv_calendar_set_today_date (line 219) | void lv_calendar_set_today_date(lv_obj_t * calendar, lv_calendar_date_t ...
function lv_calendar_set_showed_date (line 234) | void lv_calendar_set_showed_date(lv_obj_t * calendar, lv_calendar_date_t...
function lv_calendar_set_highlighted_dates (line 250) | void lv_calendar_set_highlighted_dates(lv_obj_t * calendar, lv_calendar_...
function lv_calendar_set_day_names (line 266) | void lv_calendar_set_day_names(lv_obj_t * calendar, const char ** day_na...
function lv_calendar_set_month_names (line 279) | void lv_calendar_set_month_names(lv_obj_t * calendar, const char ** day_...
function lv_calendar_set_style (line 292) | void lv_calendar_set_style(lv_obj_t * calendar, lv_calendar_style_t type...
function lv_action_t (line 335) | lv_action_t lv_calendar_get_action(const lv_obj_t * calendar, lv_calenda...
function lv_calendar_date_t (line 348) | lv_calendar_date_t * lv_calendar_get_today_date(const lv_obj_t * calendar)
function lv_calendar_date_t (line 359) | lv_calendar_date_t * lv_calendar_get_showed_date(const lv_obj_t * calendar)
function lv_calendar_date_t (line 370) | lv_calendar_date_t * lv_calendar_get_pressed_date(const lv_obj_t * calen...
function lv_calendar_date_t (line 381) | lv_calendar_date_t * lv_calendar_get_highlighted_dates(const lv_obj_t * ...
function lv_calendar_get_highlighted_dates_num (line 392) | uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t * calendar)
function lv_style_t (line 426) | lv_style_t * lv_calendar_get_style(const lv_obj_t * calendar, lv_calenda...
function lv_calendar_design (line 486) | static bool lv_calendar_design(lv_obj_t * calendar, const lv_area_t * ma...
function lv_res_t (line 517) | static lv_res_t lv_calendar_signal(lv_obj_t * calendar, lv_signal_t sign...
function calculate_touched_day (line 655) | static bool calculate_touched_day(lv_obj_t * calendar, const lv_point_t ...
function lv_coord_t (line 706) | static lv_coord_t get_header_height(lv_obj_t * calendar)
function lv_coord_t (line 718) | static lv_coord_t get_day_names_height(lv_obj_t * calendar)
function draw_header (line 730) | static void draw_header(lv_obj_t * calendar, const lv_area_t * mask)
function draw_day_names (line 771) | static void draw_day_names(lv_obj_t * calendar, const lv_area_t * mask)
function draw_days (line 796) | static void draw_days(lv_obj_t * calendar, const lv_area_t * mask)
function is_highlighted (line 938) | static bool is_highlighted(lv_obj_t * calendar, int32_t year, int32_t mo...
function get_month_length (line 992) | static uint8_t get_month_length(int32_t year, int32_t month)
function is_leap_year (line 1015) | static uint8_t is_leap_year(uint32_t year)
function get_day_of_week (line 1027) | static uint8_t get_day_of_week(uint32_t year, uint32_t month, uint32_t day)
FILE: bdk/libs/lvgl/lv_objx/lv_calendar.h
type lv_calendar_date_t (line 34) | typedef struct {
type lv_calendar_action_t (line 48) | typedef uint8_t lv_calendar_action_t;
type lv_calendar_ext_t (line 51) | typedef struct {
type lv_calendar_style_t (line 85) | typedef uint8_t lv_calendar_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_canvas.c
function lv_obj_t (line 45) | lv_obj_t * lv_canvas_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_canvas_set_buffer (line 109) | void lv_canvas_set_buffer(lv_obj_t * canvas, void * buf, lv_coord_t w, l...
function lv_canvas_set_px (line 128) | void lv_canvas_set_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y, lv_...
function lv_canvas_set_style (line 188) | void lv_canvas_set_style(lv_obj_t * canvas, lv_canvas_style_t type, lv_s...
function lv_color_t (line 208) | lv_color_t lv_canvas_get_px(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y)
function lv_style_t (line 263) | lv_style_t * lv_canvas_get_style(const lv_obj_t * canvas, lv_canvas_styl...
function lv_canvas_copy_buf (line 292) | void lv_canvas_copy_buf(lv_obj_t * canvas, const void * to_copy, lv_coor...
function lv_canvas_mult_buf (line 320) | void lv_canvas_mult_buf(lv_obj_t * canvas, void * to_copy, lv_coord_t w,...
function lv_canvas_draw_circle (line 379) | void lv_canvas_draw_circle(lv_obj_t * canvas, lv_coord_t x0, lv_coord_t ...
function lv_canvas_draw_line (line 422) | void lv_canvas_draw_line(lv_obj_t * canvas, lv_point_t point1, lv_point_...
function lv_canvas_draw_triangle (line 451) | void lv_canvas_draw_triangle(lv_obj_t * canvas, lv_point_t * points, lv_...
function lv_canvas_draw_rect (line 462) | void lv_canvas_draw_rect(lv_obj_t * canvas, lv_point_t * points, lv_colo...
function lv_canvas_draw_polygon (line 474) | void lv_canvas_draw_polygon(lv_obj_t * canvas, lv_point_t * points, size...
function lv_canvas_fill_polygon (line 493) | void lv_canvas_fill_polygon(lv_obj_t * canvas, lv_point_t * points, size...
function lv_canvas_boundary_fill4 (line 517) | void lv_canvas_boundary_fill4(lv_obj_t * canvas, lv_coord_t x, lv_coord_...
function lv_canvas_flood_fill (line 543) | void lv_canvas_flood_fill(lv_obj_t * canvas, lv_coord_t x, lv_coord_t y,...
function lv_res_t (line 571) | static lv_res_t lv_canvas_signal(lv_obj_t * canvas, lv_signal_t sign, vo...
FILE: bdk/libs/lvgl/lv_objx/lv_canvas.h
type lv_canvas_ext_t (line 35) | typedef struct {
type lv_canvas_style_t (line 46) | typedef uint8_t lv_canvas_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_cb.c
function lv_obj_t (line 51) | lv_obj_t * lv_cb_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_cb_set_text (line 127) | void lv_cb_set_text(lv_obj_t * cb, const char * txt)
function lv_cb_set_style (line 139) | void lv_cb_set_style(lv_obj_t * cb, lv_cb_style_t type, lv_style_t * style)
function lv_style_t (line 193) | lv_style_t * lv_cb_get_style(const lv_obj_t * cb, lv_cb_style_t type)
function lv_cb_design (line 236) | static bool lv_cb_design(lv_obj_t * cb, const lv_area_t * mask, lv_desig...
function lv_bullet_design (line 269) | static bool lv_bullet_design(lv_obj_t * bullet, const lv_area_t * mask, ...
function lv_res_t (line 310) | static lv_res_t lv_cb_signal(lv_obj_t * cb, lv_signal_t sign, void * param)
FILE: bdk/libs/lvgl/lv_objx/lv_cb.h
type lv_cb_ext_t (line 46) | typedef struct
type lv_cb_style_t (line 62) | typedef uint8_t lv_cb_style_t;
function lv_cb_set_checked (line 92) | static inline void lv_cb_set_checked(lv_obj_t * cb, bool checked)
function lv_cb_set_inactive (line 101) | static inline void lv_cb_set_inactive(lv_obj_t * cb)
function lv_cb_set_action (line 110) | static inline void lv_cb_set_action(lv_obj_t * cb, lv_action_t action)
function lv_cb_is_checked (line 140) | static inline bool lv_cb_is_checked(const lv_obj_t * cb)
function lv_action_t (line 150) | static inline lv_action_t lv_cb_get_action(const lv_obj_t * cb)
FILE: bdk/libs/lvgl/lv_objx/lv_chart.c
function lv_obj_t (line 59) | lv_obj_t * lv_chart_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_chart_series_t (line 133) | lv_chart_series_t * lv_chart_add_series(lv_obj_t * chart, lv_color_t color)
function lv_chart_clear_serie (line 173) | void lv_chart_clear_serie(lv_obj_t * chart, lv_chart_series_t * serie)
function lv_chart_set_div_line_count (line 200) | void lv_chart_set_div_line_count(lv_obj_t * chart, uint8_t hdiv, uint8_t...
function lv_chart_set_range (line 217) | void lv_chart_set_range(lv_obj_t * chart, lv_coord_t ymin, lv_coord_t ymax)
function lv_chart_set_type (line 233) | void lv_chart_set_type(lv_obj_t * chart, lv_chart_type_t type)
function lv_chart_set_point_count (line 248) | void lv_chart_set_point_count(lv_obj_t * chart, uint16_t point_cnt)
function lv_chart_set_series_opa (line 307) | void lv_chart_set_series_opa(lv_obj_t * chart, lv_opa_t opa)
function lv_chart_set_series_width (line 321) | void lv_chart_set_series_width(lv_obj_t * chart, lv_coord_t width)
function lv_chart_set_series_darking (line 334) | void lv_chart_set_series_darking(lv_obj_t * chart, lv_opa_t dark_eff)
function lv_chart_init_points (line 349) | void lv_chart_init_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_...
function lv_chart_set_points (line 366) | void lv_chart_set_points(lv_obj_t * chart, lv_chart_series_t * ser, lv_c...
function lv_chart_set_next (line 380) | void lv_chart_set_next(lv_obj_t * chart, lv_chart_series_t * ser, lv_coo...
function lv_chart_type_t (line 399) | lv_chart_type_t lv_chart_get_type(const lv_obj_t * chart)
function lv_chart_get_point_cnt (line 410) | uint16_t lv_chart_get_point_cnt(const lv_obj_t * chart)
function lv_opa_t (line 421) | lv_opa_t lv_chart_get_series_opa(const lv_obj_t * chart)
function lv_coord_t (line 432) | lv_coord_t lv_chart_get_series_width(const lv_obj_t * chart)
function lv_opa_t (line 443) | lv_opa_t lv_chart_get_series_darking(const lv_obj_t * chart)
function lv_chart_refresh (line 457) | void lv_chart_refresh(lv_obj_t * chart)
function lv_chart_design (line 476) | static bool lv_chart_design(lv_obj_t * chart, const lv_area_t * mask, lv...
function lv_res_t (line 503) | static lv_res_t lv_chart_signal(lv_obj_t * chart, lv_signal_t sign, void...
function lv_chart_draw_div (line 535) | static void lv_chart_draw_div(lv_obj_t * chart, const lv_area_t * mask)
function lv_chart_draw_lines (line 601) | static void lv_chart_draw_lines(lv_obj_t * chart, const lv_area_t * mask)
function lv_chart_draw_points (line 659) | static void lv_chart_draw_points(lv_obj_t * chart, const lv_area_t * mask)
function lv_chart_draw_cols (line 710) | static void lv_chart_draw_cols(lv_obj_t * chart, const lv_area_t * mask)
function lv_chart_draw_vertical_lines (line 766) | static void lv_chart_draw_vertical_lines(lv_obj_t * chart, const lv_area...
FILE: bdk/libs/lvgl/lv_objx/lv_chart.h
type lv_chart_series_t (line 35) | typedef struct
type lv_chart_ext_t (line 43) | typedef struct
type lv_chart_type_t (line 70) | typedef uint8_t lv_chart_type_t;
function lv_chart_set_style (line 188) | static inline void lv_chart_set_style(lv_obj_t *chart, lv_style_t *style)
function lv_style_t (line 237) | static inline lv_style_t* lv_chart_get_style(const lv_obj_t *chart)
FILE: bdk/libs/lvgl/lv_objx/lv_cont.c
function lv_obj_t (line 62) | lv_obj_t * lv_cont_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_cont_set_layout (line 122) | void lv_cont_set_layout(lv_obj_t * cont, lv_layout_t layout)
function lv_cont_set_fit (line 141) | void lv_cont_set_fit(lv_obj_t * cont, bool hor_en, bool ver_en)
function lv_layout_t (line 163) | lv_layout_t lv_cont_get_layout(const lv_obj_t * cont)
function lv_cont_get_hor_fit (line 174) | bool lv_cont_get_hor_fit(const lv_obj_t * cont)
function lv_cont_get_ver_fit (line 185) | bool lv_cont_get_ver_fit(const lv_obj_t * cont)
function lv_coord_t (line 196) | lv_coord_t lv_cont_get_fit_width(lv_obj_t * cont)
function lv_coord_t (line 208) | lv_coord_t lv_cont_get_fit_height(lv_obj_t * cont)
function lv_res_t (line 226) | static lv_res_t lv_cont_signal(lv_obj_t * cont, lv_signal_t sign, void *...
function lv_cont_refr_layout (line 263) | static void lv_cont_refr_layout(lv_obj_t * cont)
function lv_cont_layout_col (line 289) | static void lv_cont_layout_col(lv_obj_t * cont)
function lv_cont_layout_row (line 338) | static void lv_cont_layout_row(lv_obj_t * cont)
function lv_cont_layout_center (line 388) | static void lv_cont_layout_center(lv_obj_t * cont)
function lv_cont_layout_pretty (line 428) | static void lv_cont_layout_pretty(lv_obj_t * cont)
function lv_cont_layout_grid (line 522) | static void lv_cont_layout_grid(lv_obj_t * cont)
function lv_cont_refr_autofit (line 572) | static void lv_cont_refr_autofit(lv_obj_t * cont)
FILE: bdk/libs/lvgl/lv_objx/lv_cont.h
type lv_layout_t (line 48) | typedef uint8_t lv_layout_t;
type lv_cont_ext_t (line 50) | typedef struct
function lv_cont_set_style (line 98) | static inline void lv_cont_set_style(lv_obj_t *cont, lv_style_t * style)
function lv_style_t (line 148) | static inline lv_style_t * lv_cont_get_style(const lv_obj_t *cont)
FILE: bdk/libs/lvgl/lv_objx/lv_ddlist.c
function lv_obj_t (line 85) | lv_obj_t * lv_ddlist_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_ddlist_set_draw_arrow (line 185) | void lv_ddlist_set_draw_arrow(lv_obj_t * ddlist, bool en)
function lv_ddlist_set_options (line 198) | void lv_ddlist_set_options(lv_obj_t * ddlist, const char * options)
function lv_ddlist_set_selected (line 219) | void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
function lv_ddlist_set_action (line 239) | void lv_ddlist_set_action(lv_obj_t * ddlist, lv_action_t action)
function lv_ddlist_set_fix_height (line 251) | void lv_ddlist_set_fix_height(lv_obj_t * ddlist, lv_coord_t h)
function lv_ddlist_set_hor_fit (line 266) | void lv_ddlist_set_hor_fit(lv_obj_t * ddlist, bool en)
function lv_ddlist_set_anim_time (line 279) | void lv_ddlist_set_anim_time(lv_obj_t * ddlist, uint16_t anim_time)
function lv_ddlist_set_style (line 295) | void lv_ddlist_set_style(lv_obj_t * ddlist, lv_ddlist_style_t type, lv_s...
function lv_ddlist_set_align (line 320) | void lv_ddlist_set_align(lv_obj_t *ddlist, lv_label_align_t align)
function lv_ddlist_set_direction_up (line 327) | void lv_ddlist_set_direction_up(lv_obj_t *ddlist, bool enable)
function lv_ddlist_get_draw_arrow (line 341) | bool lv_ddlist_get_draw_arrow(lv_obj_t * ddlist)
function lv_ddlist_get_selected (line 364) | uint16_t lv_ddlist_get_selected(const lv_obj_t * ddlist)
function lv_ddlist_get_selected_str (line 376) | void lv_ddlist_get_selected_str(const lv_obj_t * ddlist, char * buf)
function lv_action_t (line 401) | lv_action_t lv_ddlist_get_action(const lv_obj_t * ddlist)
function lv_coord_t (line 412) | lv_coord_t lv_ddlist_get_fix_height(const lv_obj_t * ddlist)
function lv_ddlist_get_anim_time (line 423) | uint16_t lv_ddlist_get_anim_time(const lv_obj_t * ddlist)
function lv_style_t (line 435) | lv_style_t * lv_ddlist_get_style(const lv_obj_t * ddlist, lv_ddlist_styl...
function lv_label_align_t (line 458) | lv_label_align_t lv_ddlist_get_align(const lv_obj_t *ddlist)
function lv_ddlist_open (line 474) | void lv_ddlist_open(lv_obj_t * ddlist, bool anim_en)
function lv_ddlist_close (line 490) | void lv_ddlist_close(lv_obj_t * ddlist, bool anim_en)
function lv_txt_flag_t (line 510) | static lv_txt_flag_t lv_ddlist_get_txt_flag(const lv_obj_t *ddlist)
function lv_ddlist_design (line 541) | static bool lv_ddlist_design(lv_obj_t * ddlist, const lv_area_t * mask, ...
function lv_res_t (line 660) | static lv_res_t lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, vo...
function lv_res_t (line 777) | static lv_res_t lv_ddlist_scrl_signal(lv_obj_t * scrl, lv_signal_t sign,...
function lv_res_t (line 805) | static lv_res_t lv_ddlist_release_action(lv_obj_t * ddlist)
function lv_res_t (line 850) | static lv_res_t lv_ddlist_press_action(lv_obj_t * ddlist)
function lv_ddlist_refr_size (line 901) | static void lv_ddlist_refr_size(lv_obj_t * ddlist, bool anim_en)
function lv_ddlist_pos_current_option (line 966) | static void lv_ddlist_pos_current_option(lv_obj_t * ddlist)
FILE: bdk/libs/lvgl/lv_objx/lv_ddlist.h
type lv_ddlist_ext_t (line 61) | typedef struct
type lv_ddlist_style_t (line 86) | typedef uint8_t lv_ddlist_style_t;
function lv_ddlist_set_sb_mode (line 151) | static inline void lv_ddlist_set_sb_mode(lv_obj_t * ddlist, lv_sb_mode_t...
function lv_sb_mode_t (line 231) | static inline lv_sb_mode_t lv_ddlist_get_sb_mode(const lv_obj_t * ddlist)
FILE: bdk/libs/lvgl/lv_objx/lv_gauge.c
function lv_obj_t (line 62) | lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_gauge_set_needle_count (line 132) | void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, con...
function lv_gauge_set_value (line 165) | void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle_id, int16_t value)
function lv_gauge_set_scale (line 194) | void lv_gauge_set_scale(lv_obj_t * gauge, uint16_t angle, uint8_t line_c...
function lv_gauge_get_value (line 215) | int16_t lv_gauge_get_value(const lv_obj_t * gauge, uint8_t needle)
function lv_gauge_get_needle_count (line 230) | uint8_t lv_gauge_get_needle_count(const lv_obj_t * gauge)
function lv_gauge_get_label_count (line 241) | uint8_t lv_gauge_get_label_count(const lv_obj_t * gauge)
function lv_gauge_design (line 261) | static bool lv_gauge_design(lv_obj_t * gauge, const lv_area_t * mask, lv...
function lv_res_t (line 315) | static lv_res_t lv_gauge_signal(lv_obj_t * gauge, lv_signal_t sign, void...
function lv_gauge_draw_scale (line 344) | static void lv_gauge_draw_scale(lv_obj_t * gauge, const lv_area_t * mask)
function lv_gauge_draw_needle (line 394) | static void lv_gauge_draw_needle(lv_obj_t * gauge, const lv_area_t * mask)
FILE: bdk/libs/lvgl/lv_objx/lv_gauge.h
type lv_gauge_ext_t (line 43) | typedef struct
function lv_gauge_set_range (line 91) | static inline void lv_gauge_set_range(lv_obj_t *gauge, int16_t min, int1...
function lv_gauge_set_critical_value (line 101) | static inline void lv_gauge_set_critical_value(lv_obj_t * gauge, int16_t...
function lv_gauge_set_style (line 121) | static inline void lv_gauge_set_style(lv_obj_t *gauge, lv_style_t *bg)
function lv_gauge_get_min_value (line 150) | static inline int16_t lv_gauge_get_min_value(const lv_obj_t * lmeter)
function lv_gauge_get_max_value (line 160) | static inline int16_t lv_gauge_get_max_value(const lv_obj_t * lmeter)
function lv_gauge_get_critical_value (line 170) | static inline int16_t lv_gauge_get_critical_value(const lv_obj_t * gauge)
function lv_gauge_get_line_count (line 187) | static inline uint8_t lv_gauge_get_line_count(const lv_obj_t * gauge)
function lv_gauge_get_scale_angle (line 197) | static inline uint16_t lv_gauge_get_scale_angle(const lv_obj_t * gauge)
function lv_style_t (line 207) | static inline lv_style_t * lv_gauge_get_style(const lv_obj_t *gauge)
FILE: bdk/libs/lvgl/lv_objx/lv_img.c
function lv_obj_t (line 57) | lv_obj_t * lv_img_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_img_set_src (line 127) | void lv_img_set_src(lv_obj_t * img, const void * src_img)
function lv_img_set_src_id (line 215) | void lv_img_set_src_id(lv_obj_t * img, uint32_t src_id)
function lv_img_set_auto_size (line 231) | void lv_img_set_auto_size(lv_obj_t * img, bool en)
function lv_img_get_src_id (line 275) | uint16_t lv_img_get_src_id(lv_obj_t * img)
function lv_img_get_auto_size (line 287) | bool lv_img_get_auto_size(const lv_obj_t * img)
function lv_img_design (line 308) | static bool lv_img_design(lv_obj_t * img, const lv_area_t * mask, lv_des...
function lv_res_t (line 364) | static lv_res_t lv_img_signal(lv_obj_t * img, lv_signal_t sign, void * p...
FILE: bdk/libs/lvgl/lv_objx/lv_img.h
type lv_img_ext_t (line 38) | typedef struct
function lv_img_set_file (line 92) | static inline void lv_img_set_file(lv_obj_t * img, const char * fn)
function lv_img_set_style (line 111) | static inline void lv_img_set_style(lv_obj_t *img, lv_style_t *style)
function lv_img_set_upscale (line 121) | static inline void lv_img_set_upscale(lv_obj_t * img, bool upcale)
function lv_style_t (line 166) | static inline lv_style_t* lv_img_get_style(const lv_obj_t *img)
function lv_img_get_upscale (line 176) | static inline bool lv_img_get_upscale(const lv_obj_t * img)
FILE: bdk/libs/lvgl/lv_objx/lv_imgbtn.c
function lv_obj_t (line 47) | lv_obj_t * lv_imgbtn_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_imgbtn_set_src (line 112) | void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const vo...
function lv_imgbtn_set_src (line 130) | void lv_imgbtn_set_src(lv_obj_t * imgbtn, lv_btn_state_t state, const vo...
function lv_imgbtn_set_style (line 149) | void lv_imgbtn_set_style(lv_obj_t * imgbtn, lv_imgbtn_style_t type, lv_s...
function lv_style_t (line 220) | lv_style_t * lv_imgbtn_get_style(const lv_obj_t * imgbtn, lv_imgbtn_styl...
function lv_imgbtn_design (line 247) | static bool lv_imgbtn_design(lv_obj_t * imgbtn, const lv_area_t * mask, ...
function lv_res_t (line 336) | static lv_res_t lv_imgbtn_signal(lv_obj_t * imgbtn, lv_signal_t sign, vo...
function refr_img (line 363) | static void refr_img(lv_obj_t * imgbtn)
FILE: bdk/libs/lvgl/lv_objx/lv_imgbtn.h
type lv_imgbtn_ext_t (line 41) | typedef struct {
type lv_imgbtn_style_t (line 64) | typedef uint8_t lv_imgbtn_style_t;
function lv_imgbtn_set_toggle (line 114) | static inline void lv_imgbtn_set_toggle(lv_obj_t * imgbtn, bool tgl)
function lv_imgbtn_set_state (line 124) | static inline void lv_imgbtn_set_state(lv_obj_t * imgbtn, lv_btn_state_t...
function lv_imgbtn_toggle (line 133) | static inline void lv_imgbtn_toggle(lv_obj_t * imgbtn)
function lv_imgbtn_set_action (line 143) | static inline void lv_imgbtn_set_action(lv_obj_t * imgbtn, lv_btn_action...
function lv_btn_state_t (line 202) | static inline lv_btn_state_t lv_imgbtn_get_state(const lv_obj_t * imgbtn)
function lv_imgbtn_get_toggle (line 212) | static inline bool lv_imgbtn_get_toggle(const lv_obj_t * imgbtn)
function lv_action_t (line 222) | static inline lv_action_t lv_imgbtn_get_action(const lv_obj_t * imgbtn, ...
FILE: bdk/libs/lvgl/lv_objx/lv_kb.c
function lv_obj_t (line 98) | lv_obj_t * lv_kb_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_kb_set_ta (line 175) | void lv_kb_set_ta(lv_obj_t * kb, lv_obj_t * ta)
function lv_kb_set_mode (line 200) | void lv_kb_set_mode(lv_obj_t * kb, lv_kb_mode_t mode)
function lv_kb_set_cursor_manage (line 217) | void lv_kb_set_cursor_manage(lv_obj_t * kb, bool en)
function lv_kb_set_ok_action (line 241) | void lv_kb_set_ok_action(lv_obj_t * kb, lv_action_t action)
function lv_kb_set_hide_action (line 252) | void lv_kb_set_hide_action(lv_obj_t * kb, lv_action_t action)
function lv_kb_set_style (line 264) | void lv_kb_set_style(lv_obj_t * kb, lv_kb_style_t type, lv_style_t * style)
function lv_obj_t (line 297) | lv_obj_t * lv_kb_get_ta(const lv_obj_t * kb)
function lv_kb_mode_t (line 308) | lv_kb_mode_t lv_kb_get_mode(const lv_obj_t * kb)
function lv_kb_get_cursor_manage (line 320) | bool lv_kb_get_cursor_manage(const lv_obj_t * kb)
function lv_action_t (line 331) | lv_action_t lv_kb_get_ok_action(const lv_obj_t * kb)
function lv_action_t (line 342) | lv_action_t lv_kb_get_hide_action(const lv_obj_t * kb)
function lv_style_t (line 354) | lv_style_t * lv_kb_get_style(const lv_obj_t * kb, lv_kb_style_t type)
function lv_res_t (line 396) | static lv_res_t lv_kb_signal(lv_obj_t * kb, lv_signal_t sign, void * param)
function lv_res_t (line 424) | static lv_res_t lv_kb_def_action(lv_obj_t * kb, const char * txt)
FILE: bdk/libs/lvgl/lv_objx/lv_kb.h
type lv_kb_mode_t (line 65) | typedef uint8_t lv_kb_mode_t;
type lv_kb_ext_t (line 68) | typedef struct {
type lv_kb_style_t (line 86) | typedef uint8_t lv_kb_style_t;
function lv_kb_set_map (line 146) | static inline void lv_kb_set_map(lv_obj_t *kb, const char ** map)
FILE: bdk/libs/lvgl/lv_objx/lv_label.c
function lv_obj_t (line 66) | lv_obj_t * lv_label_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_label_set_text (line 147) | void lv_label_set_text(lv_obj_t * label, const char * text)
function lv_label_set_array_text (line 190) | void lv_label_set_array_text(lv_obj_t * label, const char * array, uint1...
function lv_label_set_static_text (line 224) | void lv_label_set_static_text(lv_obj_t * label, const char * text)
function lv_label_set_text_id (line 246) | void lv_label_set_text_id(lv_obj_t * label, uint32_t txt_id)
function lv_label_set_long_mode (line 262) | void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_...
function lv_label_set_align (line 293) | void lv_label_set_align(lv_obj_t * label, lv_label_align_t align)
function lv_label_set_recolor (line 308) | void lv_label_set_recolor(lv_obj_t * label, bool en)
function lv_label_set_body_draw (line 323) | void lv_label_set_body_draw(lv_obj_t * label, bool en)
function lv_label_set_anim_speed (line 340) | void lv_label_set_anim_speed(lv_obj_t * label, uint16_t anim_speed)
function lv_label_get_text_id (line 374) | uint16_t lv_label_get_text_id(lv_obj_t * label)
function lv_label_long_mode_t (line 386) | lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * label)
function lv_label_align_t (line 397) | lv_label_align_t lv_label_get_align(const lv_obj_t * label)
function lv_label_get_recolor (line 408) | bool lv_label_get_recolor(const lv_obj_t * label)
function lv_label_get_body_draw (line 419) | bool lv_label_get_body_draw(const lv_obj_t * label)
function lv_label_get_anim_speed (line 430) | uint16_t lv_label_get_anim_speed(const lv_obj_t * label)
function lv_label_get_letter_pos (line 442) | void lv_label_get_letter_pos(const lv_obj_t * label, uint16_t index, lv_...
function lv_label_get_letter_on (line 513) | uint16_t lv_label_get_letter_on(const lv_obj_t * label, lv_point_t * pos)
function lv_label_ins_text (line 592) | void lv_label_ins_text(lv_obj_t * label, uint32_t pos, const char * txt)
function lv_label_cut_text (line 629) | void lv_label_cut_text(lv_obj_t * label, uint32_t pos, uint32_t cnt)
function lv_label_design (line 660) | static bool lv_label_design(lv_obj_t * label, const lv_area_t * mask, lv...
function lv_res_t (line 725) | static lv_res_t lv_label_signal(lv_obj_t * label, lv_signal_t sign, void...
function lv_label_refr_text (line 783) | static void lv_label_refr_text(lv_obj_t * label)
function lv_label_revert_dots (line 947) | static void lv_label_revert_dots(lv_obj_t * label)
function lv_label_set_offset_x (line 973) | static void lv_label_set_offset_x(lv_obj_t * label, lv_coord_t x)
function lv_label_set_offset_y (line 980) | static void lv_label_set_offset_y(lv_obj_t * label, lv_coord_t y)
FILE: bdk/libs/lvgl/lv_objx/lv_label.h
type lv_label_long_mode_t (line 49) | typedef uint8_t lv_label_long_mode_t;
type lv_label_align_t (line 57) | typedef uint8_t lv_label_align_t;
type lv_label_ext_t (line 60) | typedef struct
function lv_label_set_style (line 176) | static inline void lv_label_set_style(lv_obj_t *label, lv_style_t *style)
function lv_style_t (line 257) | static inline lv_style_t* lv_label_get_style(const lv_obj_t *label)
FILE: bdk/libs/lvgl/lv_objx/lv_led.c
function lv_obj_t (line 53) | lv_obj_t * lv_led_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_led_set_bright (line 111) | void lv_led_set_bright(lv_obj_t * led, uint8_t bright)
function lv_led_on (line 127) | void lv_led_on(lv_obj_t * led)
function lv_led_off (line 136) | void lv_led_off(lv_obj_t * led)
function lv_led_toggle (line 146) | void lv_led_toggle(lv_obj_t * led)
function lv_led_get_bright (line 162) | uint8_t lv_led_get_bright(const lv_obj_t * led)
function lv_led_design (line 182) | static bool lv_led_design(lv_obj_t * led, const lv_area_t * mask, lv_des...
function lv_res_t (line 224) | static lv_res_t lv_led_signal(lv_obj_t * led, lv_signal_t sign, void * p...
FILE: bdk/libs/lvgl/lv_objx/lv_led.h
type lv_led_ext_t (line 35) | typedef struct
function lv_led_set_style (line 84) | static inline void lv_led_set_style(lv_obj_t *led, lv_style_t *style)
function lv_style_t (line 101) | static inline lv_style_t* lv_led_get_style(const lv_obj_t *led)
FILE: bdk/libs/lvgl/lv_objx/lv_line.c
function lv_obj_t (line 66) | lv_obj_t * lv_line_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_line_set_points (line 124) | void lv_line_set_points(lv_obj_t * line, const lv_point_t * point_a, uin...
function lv_line_set_auto_size (line 152) | void lv_line_set_auto_size(lv_obj_t * line, bool en)
function lv_line_set_y_invert (line 170) | void lv_line_set_y_invert(lv_obj_t * line, bool en)
function lv_line_get_auto_size (line 189) | bool lv_line_get_auto_size(const lv_obj_t * line)
function lv_line_get_y_invert (line 201) | bool lv_line_get_y_invert(const lv_obj_t * line)
function lv_line_design (line 222) | static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_d...
function lv_res_t (line 293) | static lv_res_t lv_line_signal(lv_obj_t * line, lv_signal_t sign, void *...
FILE: bdk/libs/lvgl/lv_objx/lv_line.h
type lv_line_ext_t (line 35) | typedef struct
function lv_line_set_style (line 93) | static inline void lv_line_set_style(lv_obj_t *line, lv_style_t *style)
function lv_line_set_upscale (line 103) | static inline void lv_line_set_upscale(lv_obj_t * line, bool upcale)
function lv_style_t (line 131) | static inline lv_style_t* lv_line_get_style(const lv_obj_t *line)
function lv_line_get_upscale (line 141) | static inline bool lv_line_get_upscale(const lv_obj_t * line)
FILE: bdk/libs/lvgl/lv_objx/lv_list.c
function lv_obj_t (line 90) | lv_obj_t * lv_list_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_list_clean (line 183) | void lv_list_clean(lv_obj_t * obj)
function lv_obj_t (line 203) | lv_obj_t * lv_list_add(lv_obj_t * list, const void * img_src, const char...
function lv_list_remove (line 275) | bool lv_list_remove(const lv_obj_t * list, uint32_t index)
function lv_list_set_single_mode (line 302) | void lv_list_set_single_mode(lv_obj_t *list, bool mode)
function lv_list_set_btn_selected (line 316) | void lv_list_set_btn_selected(lv_obj_t * list, lv_obj_t * btn)
function lv_list_set_anim_time (line 347) | void lv_list_set_anim_time(lv_obj_t * list, uint16_t anim_time)
function lv_list_set_style (line 364) | void lv_list_set_style(lv_obj_t * list, lv_list_style_t type, lv_style_t...
function lv_list_get_single_mode (line 428) | bool lv_list_get_single_mode(lv_obj_t *list)
function lv_obj_t (line 452) | lv_obj_t * lv_list_get_btn_label(const lv_obj_t * btn)
function lv_obj_t (line 470) | lv_obj_t * lv_list_get_btn_img(const lv_obj_t * btn)
function lv_obj_t (line 493) | lv_obj_t * lv_list_get_prev_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
function lv_obj_t (line 520) | lv_obj_t * lv_list_get_next_btn(const lv_obj_t * list, lv_obj_t * prev_btn)
function lv_list_get_btn_index (line 545) | int32_t lv_list_get_btn_index(const lv_obj_t * list, const lv_obj_t * btn)
function lv_list_get_size (line 568) | uint32_t lv_list_get_size(const lv_obj_t * list)
function lv_obj_t (line 580) | lv_obj_t * lv_list_get_btn_selected(const lv_obj_t * list)
function lv_list_get_anim_time (line 593) | uint16_t lv_list_get_anim_time(const lv_obj_t * list)
function lv_style_t (line 605) | lv_style_t * lv_list_get_style(const lv_obj_t * list, lv_list_style_t type)
function lv_list_up (line 653) | void lv_list_up(const lv_obj_t * list)
function lv_list_down (line 698) | void lv_list_down(const lv_obj_t * list)
function lv_list_focus (line 741) | void lv_list_focus(const lv_obj_t * btn, bool anim_en)
function lv_res_t (line 764) | static lv_res_t lv_list_signal(lv_obj_t * list, lv_signal_t sign, void *...
function lv_res_t (line 897) | static lv_res_t lv_list_btn_signal(lv_obj_t * btn, lv_signal_t sign, voi...
function refr_btn_width (line 954) | static void refr_btn_width(lv_obj_t * list)
function lv_list_btn_single_selected (line 979) | static void lv_list_btn_single_selected(lv_obj_t *btn)
function lv_list_is_list_btn (line 1002) | static bool lv_list_is_list_btn(lv_obj_t * list_btn)
function lv_list_is_list_label (line 1020) | static bool lv_list_is_list_label(lv_obj_t * list_label)
function lv_list_is_list_img (line 1038) | static bool lv_list_is_list_img(lv_obj_t * list_img)
FILE: bdk/libs/lvgl/lv_objx/lv_list.h
type lv_list_ext_t (line 52) | typedef struct
type lv_list_style_t (line 78) | typedef uint8_t lv_list_style_t;
function lv_list_set_sb_mode (line 154) | static inline void lv_list_set_sb_mode(lv_obj_t * list, lv_sb_mode_t mode)
function lv_list_set_scroll_propagation (line 164) | static inline void lv_list_set_scroll_propagation(lv_obj_t * list, bool en)
function lv_list_set_edge_flash (line 174) | static inline void lv_list_set_edge_flash(lv_obj_t * list, bool en)
function lv_sb_mode_t (line 271) | static inline lv_sb_mode_t lv_list_get_sb_mode(const lv_obj_t * list)
function lv_list_get_scroll_propagation (line 281) | static inline bool lv_list_get_scroll_propagation(lv_obj_t * list)
function lv_list_get_edge_flash (line 291) | static inline bool lv_list_get_edge_flash(lv_obj_t * list)
FILE: bdk/libs/lvgl/lv_objx/lv_lmeter.c
function lv_obj_t (line 53) | lv_obj_t * lv_lmeter_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_lmeter_set_value (line 119) | void lv_lmeter_set_value(lv_obj_t * lmeter, int16_t value)
function lv_lmeter_set_range (line 135) | void lv_lmeter_set_range(lv_obj_t * lmeter, int16_t min, int16_t max)
function lv_lmeter_set_scale (line 159) | void lv_lmeter_set_scale(lv_obj_t * lmeter, uint16_t angle, uint8_t line...
function lv_lmeter_get_value (line 180) | int16_t lv_lmeter_get_value(const lv_obj_t * lmeter)
function lv_lmeter_get_min_value (line 191) | int16_t lv_lmeter_get_min_value(const lv_obj_t * lmeter)
function lv_lmeter_get_max_value (line 202) | int16_t lv_lmeter_get_max_value(const lv_obj_t * lmeter)
function lv_lmeter_get_line_count (line 213) | uint8_t lv_lmeter_get_line_count(const lv_obj_t * lmeter)
function lv_lmeter_get_scale_angle (line 224) | uint16_t lv_lmeter_get_scale_angle(const lv_obj_t * lmeter)
function lv_lmeter_design (line 245) | static bool lv_lmeter_design(lv_obj_t * lmeter, const lv_area_t * mask, ...
function lv_res_t (line 331) | static lv_res_t lv_lmeter_signal(lv_obj_t * lmeter, lv_signal_t sign, vo...
function lv_coord_t (line 363) | static lv_coord_t lv_lmeter_coord_round(int32_t x)
FILE: bdk/libs/lvgl/lv_objx/lv_lmeter.h
type lv_lmeter_ext_t (line 34) | typedef struct
function lv_lmeter_set_style (line 89) | static inline void lv_lmeter_set_style(lv_obj_t *lmeter, lv_style_t *bg)
function lv_style_t (line 138) | static inline lv_style_t * lv_lmeter_get_style(const lv_obj_t * lmeter)
FILE: bdk/libs/lvgl/lv_objx/lv_mbox.c
function lv_obj_t (line 80) | lv_obj_t * lv_mbox_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_mbox_add_btns (line 154) | void lv_mbox_add_btns(lv_obj_t * mbox, const char ** btn_map, lv_btnm_ac...
function lv_mbox_set_text (line 189) | void lv_mbox_set_text(lv_obj_t * mbox, const char * txt)
function lv_mbox_set_action (line 203) | void lv_mbox_set_action(lv_obj_t * mbox, lv_btnm_action_t action)
function lv_mbox_set_anim_time (line 215) | void lv_mbox_set_anim_time(lv_obj_t * mbox, uint16_t anim_time)
function lv_mbox_start_auto_close (line 230) | void lv_mbox_start_auto_close(lv_obj_t * mbox, uint16_t delay)
function lv_mbox_stop_auto_close (line 255) | void lv_mbox_stop_auto_close(lv_obj_t * mbox)
function lv_mbox_set_style (line 270) | void lv_mbox_set_style(lv_obj_t * mbox, lv_mbox_style_t type, lv_style_t...
function lv_mbox_set_recolor (line 307) | void lv_mbox_set_recolor(lv_obj_t * mbox, bool en)
function lv_mbox_set_recolor_text (line 315) | void lv_mbox_set_recolor_text(lv_obj_t * mbox, bool en)
function lv_obj_t (line 345) | lv_obj_t * lv_mbox_get_from_btn(const lv_obj_t * btn)
function lv_mbox_get_anim_time (line 357) | uint16_t lv_mbox_get_anim_time(const lv_obj_t * mbox)
function lv_style_t (line 369) | lv_style_t * lv_mbox_get_style(const lv_obj_t * mbox, lv_mbox_style_t type)
function lv_mbox_get_recolor (line 409) | bool lv_mbox_get_recolor(const lv_obj_t * mbox)
function lv_res_t (line 431) | static lv_res_t lv_mbox_signal(lv_obj_t * mbox, lv_signal_t sign, void *...
function mbox_realign (line 495) | static void mbox_realign(lv_obj_t * mbox)
function lv_res_t (line 514) | static lv_res_t lv_mbox_close_action(lv_obj_t * btn, const char * txt)
function lv_mbox_close_end_cb (line 527) | static void lv_mbox_close_end_cb(lv_obj_t * mbox)
FILE: bdk/libs/lvgl/lv_objx/lv_mbox.h
type lv_mbox_ext_t (line 68) | typedef struct
type lv_mbox_style_t (line 86) | typedef uint8_t lv_mbox_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_objx_templ.c
function lv_obj_t (line 53) | lv_obj_t * lv_templ_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_templ_set_style (line 118) | void lv_templ_set_style(lv_obj_t * templ, lv_templ_style_t type, lv_styl...
function lv_style_t (line 144) | lv_style_t * lv_templ_get_style(const lv_obj_t * templ, lv_templ_style_t...
function lv_templ_design (line 183) | static bool lv_templ_design(lv_obj_t * templ, const lv_area_t * mask, lv...
function lv_res_t (line 208) | static lv_res_t lv_templ_signal(lv_obj_t * templ, lv_signal_t sign, void...
FILE: bdk/libs/lvgl/lv_objx/lv_objx_templ.h
type lv_templ_ext_t (line 42) | typedef struct {
type lv_templ_style_t (line 53) | typedef uint8_t lv_templ_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_page.c
function lv_obj_t (line 81) | lv_obj_t * lv_page_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_page_clean (line 190) | void lv_page_clean(lv_obj_t * obj)
function lv_page_set_rel_action (line 205) | void lv_page_set_rel_action(lv_obj_t * page, lv_action_t rel_action)
function lv_page_set_pr_action (line 216) | void lv_page_set_pr_action(lv_obj_t * page, lv_action_t pr_action)
function lv_page_set_sb_mode (line 227) | void lv_page_set_sb_mode(lv_obj_t * page, lv_sb_mode_t sb_mode)
function lv_page_set_arrow_scroll (line 251) | void lv_page_set_arrow_scroll(lv_obj_t * page, bool en)
function lv_page_set_scroll_propagation (line 262) | void lv_page_set_scroll_propagation(lv_obj_t * page, bool en)
function lv_page_set_edge_flash (line 273) | void lv_page_set_edge_flash(lv_obj_t * page, bool en)
function lv_page_set_style (line 285) | void lv_page_set_style(lv_obj_t * page, lv_page_style_t type, lv_style_t...
function lv_obj_t (line 325) | lv_obj_t * lv_page_get_scrl(const lv_obj_t * page)
function lv_action_t (line 337) | lv_action_t lv_page_get_pr_action(lv_obj_t * page)
function lv_action_t (line 348) | lv_action_t lv_page_get_rel_action(lv_obj_t * page)
function lv_sb_mode_t (line 359) | lv_sb_mode_t lv_page_get_sb_mode(const lv_obj_t * page)
function lv_page_get_arrow_scroll (line 370) | bool lv_page_get_arrow_scroll(const lv_obj_t * page)
function lv_page_get_scroll_propagation (line 381) | bool lv_page_get_scroll_propagation(lv_obj_t * page)
function lv_page_get_edge_flash (line 392) | bool lv_page_get_edge_flash(lv_obj_t * page)
function lv_coord_t (line 403) | lv_coord_t lv_page_get_fit_width(lv_obj_t * page)
function lv_coord_t (line 416) | lv_coord_t lv_page_get_fit_height(lv_obj_t * page)
function lv_style_t (line 430) | lv_style_t * lv_page_get_style(const lv_obj_t * page, lv_page_style_t type)
function lv_page_glue_obj (line 471) | void lv_page_glue_obj(lv_obj_t * obj, bool glue)
function lv_page_focus (line 483) | void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, uint16_t anim_...
function lv_page_scroll_hor (line 555) | void lv_page_scroll_hor(lv_obj_t * page, lv_coord_t dist)
function lv_page_scroll_ver (line 584) | void lv_page_scroll_ver(lv_obj_t * page, lv_coord_t dist)
function lv_page_start_edge_flash (line 613) | void lv_page_start_edge_flash(lv_obj_t * page)
function lv_page_design (line 651) | static bool lv_page_design(lv_obj_t * page, const lv_area_t * mask, lv_d...
function lv_scrl_design (line 753) | static bool lv_scrl_design(lv_obj_t * scrl, const lv_area_t * mask, lv_d...
function lv_res_t (line 793) | static lv_res_t lv_page_signal(lv_obj_t * page, lv_signal_t sign, void *...
function lv_res_t (line 894) | static lv_res_t lv_page_scrollable_signal(lv_obj_t * scrl, lv_signal_t s...
function lv_page_sb_refresh (line 1077) | static void lv_page_sb_refresh(lv_obj_t * page)
function edge_flash_anim (line 1187) | static void edge_flash_anim(void * page, int32_t v)
function edge_flash_anim_end (line 1194) | static void edge_flash_anim_end(void * page)
FILE: bdk/libs/lvgl/lv_objx/lv_page.h
type lv_sb_mode_t (line 66) | typedef uint8_t lv_sb_mode_t;
type lv_page_ext_t (line 69) | typedef struct
type lv_page_style_t (line 109) | typedef uint8_t lv_page_style_t;
function lv_page_set_scrl_fit (line 204) | static inline void lv_page_set_scrl_fit(lv_obj_t *page, bool hor_en, boo...
function lv_page_set_scrl_width (line 214) | static inline void lv_page_set_scrl_width(lv_obj_t *page, lv_coord_t w)
function lv_page_set_scrl_height (line 224) | static inline void lv_page_set_scrl_height(lv_obj_t *page, lv_coord_t h)
function lv_page_set_scrl_layout (line 235) | static inline void lv_page_set_scrl_layout(lv_obj_t * page, lv_layout_t ...
function lv_coord_t (line 300) | static inline lv_coord_t lv_page_get_scrl_width(const lv_obj_t *page)
function lv_coord_t (line 310) | static inline lv_coord_t lv_page_get_scrl_height(const lv_obj_t *page)
function lv_layout_t (line 320) | static inline lv_layout_t lv_page_get_scrl_layout(const lv_obj_t * page)
function lv_page_get_scrl_hor_fit (line 330) | static inline bool lv_page_get_scrl_hor_fit(const lv_obj_t * page)
function lv_page_get_scrl_fit_ver (line 340) | static inline bool lv_page_get_scrl_fit_ver(const lv_obj_t * page)
FILE: bdk/libs/lvgl/lv_objx/lv_preload.c
function lv_obj_t (line 63) | lv_obj_t * lv_preload_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_preload_set_arc_length (line 130) | void lv_preload_set_arc_length(lv_obj_t * preload, uint16_t deg)
function lv_preload_set_spin_time (line 142) | void lv_preload_set_spin_time(lv_obj_t * preload, uint16_t time)
function lv_preload_set_style (line 159) | void lv_preload_set_style(lv_obj_t * preload, lv_preload_style_t type, l...
function lv_preload_set_animation_type (line 173) | void lv_preload_set_animation_type(lv_obj_t * preload, lv_preloader_type...
function lv_preload_get_arc_length (line 249) | uint16_t lv_preload_get_arc_length(const lv_obj_t * preload)
function lv_preload_get_spin_time (line 260) | uint16_t lv_preload_get_spin_time(const lv_obj_t * preload)
function lv_style_t (line 272) | lv_style_t * lv_preload_get_style(const lv_obj_t * preload, lv_preload_s...
function lv_preloader_type_t (line 293) | lv_preloader_type_t lv_preload_get_animation_type(lv_obj_t * preload)
function lv_preload_spinner_animation (line 308) | void lv_preload_spinner_animation(void * ptr, int32_t val)
function lv_preload_design (line 337) | static bool lv_preload_design(lv_obj_t * preload, const lv_area_t * mask...
function lv_res_t (line 388) | static lv_res_t lv_preload_signal(lv_obj_t * preload, lv_signal_t sign, ...
FILE: bdk/libs/lvgl/lv_objx/lv_preload.h
type lv_preloader_type_t (line 48) | typedef uint8_t lv_preloader_type_t;
type lv_preload_ext_t (line 51) | typedef struct {
type lv_preload_style_t (line 64) | typedef uint8_t lv_preload_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_roller.c
function lv_obj_t (line 61) | lv_obj_t * lv_roller_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_roller_set_align (line 131) | void lv_roller_set_align(lv_obj_t * roller, lv_label_align_t align)
function lv_roller_set_selected (line 145) | void lv_roller_set_selected(lv_obj_t * roller, uint16_t sel_opt, bool an...
function lv_roller_set_visible_row_count (line 162) | void lv_roller_set_visible_row_count(lv_obj_t * roller, uint8_t row_cnt)
function lv_roller_set_style (line 176) | void lv_roller_set_style(lv_obj_t * roller, lv_roller_style_t type, lv_s...
function lv_label_align_t (line 197) | lv_label_align_t lv_roller_get_align(const lv_obj_t * roller)
function lv_roller_get_hor_fit (line 210) | bool lv_roller_get_hor_fit(const lv_obj_t * roller)
function lv_style_t (line 221) | lv_style_t * lv_roller_get_style(const lv_obj_t * roller, lv_roller_styl...
function lv_roller_design (line 250) | static bool lv_roller_design(lv_obj_t * roller, const lv_area_t * mask, ...
function lv_res_t (line 325) | static lv_res_t lv_roller_signal(lv_obj_t * roller, lv_signal_t sign, vo...
function lv_res_t (line 434) | static lv_res_t lv_roller_scrl_signal(lv_obj_t * roller_scrl, lv_signal_...
function draw_bg (line 490) | static void draw_bg(lv_obj_t * roller, const lv_area_t * mask)
function refr_position (line 545) | static void refr_position(lv_obj_t * roller, bool anim_en)
FILE: bdk/libs/lvgl/lv_objx/lv_roller.h
type lv_roller_ext_t (line 41) | typedef struct {
type lv_roller_style_t (line 50) | typedef uint8_t lv_roller_style_t;
function lv_roller_set_options (line 80) | static inline void lv_roller_set_options(lv_obj_t * roller, const char *...
function lv_roller_set_action (line 98) | static inline void lv_roller_set_action(lv_obj_t * roller, lv_action_t a...
function lv_roller_set_hor_fit (line 115) | static inline void lv_roller_set_hor_fit(lv_obj_t * roller, bool en)
function lv_roller_set_anim_time (line 125) | static inline void lv_roller_set_anim_time(lv_obj_t *roller, uint16_t an...
function lv_roller_get_selected (line 164) | static inline uint16_t lv_roller_get_selected(const lv_obj_t *roller)
function lv_roller_get_selected_str (line 174) | static inline void lv_roller_get_selected_str(const lv_obj_t * roller, c...
function lv_action_t (line 184) | static inline lv_action_t lv_roller_get_action(const lv_obj_t * roller)
function lv_roller_get_anim_time (line 194) | static inline uint16_t lv_roller_get_anim_time(const lv_obj_t * roller)
FILE: bdk/libs/lvgl/lv_objx/lv_slider.c
function lv_obj_t (line 69) | lv_obj_t * lv_slider_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_slider_set_action (line 137) | void lv_slider_set_action(lv_obj_t * slider, lv_action_t action)
function lv_slider_set_knob_in (line 149) | void lv_slider_set_knob_in(lv_obj_t * slider, bool in)
function lv_slider_set_style (line 164) | void lv_slider_set_style(lv_obj_t * slider, lv_slider_style_t type, lv_s...
function lv_slider_get_value (line 191) | int16_t lv_slider_get_value(const lv_obj_t * slider)
function lv_action_t (line 204) | lv_action_t lv_slider_get_action(const lv_obj_t * slider)
function lv_slider_is_dragged (line 215) | bool lv_slider_is_dragged(const lv_obj_t * slider)
function lv_slider_get_knob_in (line 227) | bool lv_slider_get_knob_in(const lv_obj_t * slider)
function lv_style_t (line 239) | lv_style_t * lv_slider_get_style(const lv_obj_t * slider, lv_slider_styl...
function lv_slider_design (line 277) | static bool lv_slider_design(lv_obj_t * slider, const lv_area_t * mask, ...
function lv_res_t (line 436) | static lv_res_t lv_slider_signal(lv_obj_t * slider, lv_signal_t sign, vo...
FILE: bdk/libs/lvgl/lv_objx/lv_slider.h
type lv_slider_ext_t (line 40) | typedef struct
type lv_slider_style_t (line 57) | typedef uint8_t lv_slider_style_t;
function lv_slider_set_value (line 80) | static inline void lv_slider_set_value(lv_obj_t * slider, int16_t value)
function lv_slider_set_value_anim (line 91) | static inline void lv_slider_set_value_anim(lv_obj_t * slider, int16_t v...
function lv_slider_set_range (line 102) | static inline void lv_slider_set_range(lv_obj_t *slider, int16_t min, in...
function lv_slider_get_min_value (line 146) | static inline int16_t lv_slider_get_min_value(const lv_obj_t * slider)
function lv_slider_get_max_value (line 156) | static inline int16_t lv_slider_get_max_value(const lv_obj_t * slider)
FILE: bdk/libs/lvgl/lv_objx/lv_spinbox.c
function lv_obj_t (line 49) | lv_obj_t * lv_spinbox_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_spinbox_set_value (line 125) | void lv_spinbox_set_value(lv_obj_t * spinbox, int32_t i)
function lv_spinbox_set_digit_format (line 147) | void lv_spinbox_set_digit_format(lv_obj_t * spinbox, uint8_t digit_count...
function lv_spinbox_set_step (line 170) | void lv_spinbox_set_step(lv_obj_t * spinbox, uint32_t step)
function lv_spinbox_set_range (line 184) | void lv_spinbox_set_range(lv_obj_t * spinbox, int32_t range_min, int32_t...
function lv_spinbox_set_value_changed_cb (line 207) | void lv_spinbox_set_value_changed_cb(lv_obj_t * spinbox, lv_spinbox_valu...
function lv_spinbox_set_padding_left (line 218) | void lv_spinbox_set_padding_left(lv_obj_t * spinbox, uint8_t padding)
function lv_spinbox_get_value (line 234) | int32_t lv_spinbox_get_value(lv_obj_t * spinbox)
function lv_spinbox_step_next (line 249) | void lv_spinbox_step_next(lv_obj_t * spinbox)
function lv_spinbox_step_previous (line 264) | void lv_spinbox_step_previous(lv_obj_t * spinbox)
function lv_spinbox_increment (line 279) | void lv_spinbox_increment(lv_obj_t * spinbox)
function lv_spinbox_decrement (line 300) | void lv_spinbox_decrement(lv_obj_t * spinbox)
function lv_res_t (line 329) | static lv_res_t lv_spinbox_signal(lv_obj_t * spinbox, lv_signal_t sign, ...
function lv_spinbox_updatevalue (line 397) | static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
FILE: bdk/libs/lvgl/lv_objx/lv_spinbox.h
type lv_spinbox_ext_t (line 46) | typedef struct {
type lv_spinbox_style_t (line 66) | typedef uint8_t lv_spinbox_style_t;
function lv_spinbox_set_style (line 91) | static inline void lv_spinbox_set_style(lv_obj_t * spinbox, lv_spinbox_s...
function lv_style_t (line 150) | static inline lv_style_t * lv_spinbox_get_style(lv_obj_t * spinbox, lv_s...
FILE: bdk/libs/lvgl/lv_objx/lv_sw.c
function lv_obj_t (line 54) | lv_obj_t * lv_sw_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_sw_on (line 130) | void lv_sw_on(lv_obj_t * sw)
function lv_sw_off (line 142) | void lv_sw_off(lv_obj_t * sw)
function lv_sw_toggle (line 155) | bool lv_sw_toggle(lv_obj_t *sw) {
function lv_sw_on_anim (line 170) | void lv_sw_on_anim(lv_obj_t * sw)
function lv_sw_off_anim (line 183) | void lv_sw_off_anim(lv_obj_t * sw)
function lv_sw_toggle_anim (line 197) | bool lv_sw_toggle_anim(lv_obj_t *sw) {
function lv_sw_set_style (line 214) | void lv_sw_set_style(lv_obj_t * sw, lv_sw_style_t type, lv_style_t * style)
function lv_sw_set_anim_time (line 236) | void lv_sw_set_anim_time(lv_obj_t *sw, uint16_t anim_time)
function lv_style_t (line 255) | lv_style_t * lv_sw_get_style(const lv_obj_t * sw, lv_sw_style_t type)
function lv_sw_get_anim_time (line 281) | uint16_t lv_sw_get_anim_time(const lv_obj_t *sw)
function lv_res_t (line 303) | static lv_res_t lv_sw_signal(lv_obj_t * sw, lv_signal_t sign, void * param)
function lv_sw_anim_to_value (line 424) | static void lv_sw_anim_to_value(lv_obj_t * sw, int16_t value)
FILE: bdk/libs/lvgl/lv_objx/lv_sw.h
type lv_sw_ext_t (line 41) | typedef struct
type lv_sw_style_t (line 61) | typedef uint8_t lv_sw_style_t;
function lv_sw_set_action (line 122) | static inline void lv_sw_set_action(lv_obj_t * sw, lv_action_t action)
function lv_sw_get_state (line 154) | static inline bool lv_sw_get_state(const lv_obj_t *sw)
function lv_action_t (line 164) | static inline lv_action_t lv_sw_get_action(const lv_obj_t * slider)
FILE: bdk/libs/lvgl/lv_objx/lv_ta.c
function lv_obj_t (line 79) | lv_obj_t * lv_ta_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_ta_add_char (line 189) | void lv_ta_add_char(lv_obj_t * ta, uint32_t c)
function lv_ta_add_text (line 257) | void lv_ta_add_text(lv_obj_t * ta, const char * txt)
function lv_ta_del_char (line 319) | void lv_ta_del_char(lv_obj_t * ta)
function lv_ta_set_text (line 363) | void lv_ta_set_text(lv_obj_t * ta, const char * txt)
function lv_ta_set_cursor_pos (line 423) | void lv_ta_set_cursor_pos(lv_obj_t * ta, int16_t pos)
function lv_ta_set_cursor_type (line 497) | void lv_ta_set_cursor_type(lv_obj_t * ta, lv_cursor_type_t cur_type)
function lv_ta_set_pwd_mode (line 512) | void lv_ta_set_pwd_mode(lv_obj_t * ta, bool en)
function lv_ta_set_one_line (line 552) | void lv_ta_set_one_line(lv_obj_t * ta, bool en)
function lv_ta_set_text_align (line 588) | void lv_ta_set_text_align(lv_obj_t * ta, lv_label_align_t align)
function lv_ta_set_accepted_chars (line 622) | void lv_ta_set_accepted_chars(lv_obj_t * ta, const char * list)
function lv_ta_set_max_length (line 634) | void lv_ta_set_max_length(lv_obj_t * ta, uint16_t num)
function lv_ta_set_style (line 647) | void lv_ta_set_style(lv_obj_t * ta, lv_ta_style_t type, lv_style_t * style)
function lv_obj_t (line 698) | lv_obj_t * lv_ta_get_label(const lv_obj_t * ta)
function lv_ta_get_cursor_pos (line 710) | uint16_t lv_ta_get_cursor_pos(const lv_obj_t * ta)
function lv_cursor_type_t (line 721) | lv_cursor_type_t lv_ta_get_cursor_type(const lv_obj_t * ta)
function lv_ta_get_pwd_mode (line 732) | bool lv_ta_get_pwd_mode(const lv_obj_t * ta)
function lv_ta_get_one_line (line 743) | bool lv_ta_get_one_line(const lv_obj_t * ta)
function lv_ta_get_max_length (line 766) | uint16_t lv_ta_get_max_length(lv_obj_t * ta)
function lv_style_t (line 778) | lv_style_t * lv_ta_get_style(const lv_obj_t * ta, lv_ta_style_t type)
function lv_ta_cursor_right (line 812) | void lv_ta_cursor_right(lv_obj_t * ta)
function lv_ta_cursor_left (line 823) | void lv_ta_cursor_left(lv_obj_t * ta)
function lv_ta_cursor_down (line 836) | void lv_ta_cursor_down(lv_obj_t * ta)
function lv_ta_cursor_up (line 866) | void lv_ta_cursor_up(lv_obj_t * ta)
function lv_ta_design (line 903) | static bool lv_ta_design(lv_obj_t * ta, const lv_area_t * mask, lv_desig...
function lv_ta_scrollable_design (line 929) | static bool lv_ta_scrollable_design(lv_obj_t * scrl, const lv_area_t * m...
function lv_res_t (line 1002) | static lv_res_t lv_ta_signal(lv_obj_t * ta, lv_signal_t sign, void * param)
function lv_res_t (line 1104) | static lv_res_t lv_ta_scrollable_signal(lv_obj_t * scrl, lv_signal_t sig...
function cursor_blink_anim (line 1148) | static void cursor_blink_anim(lv_obj_t * ta, uint8_t show)
function pwd_char_hider_anim (line 1175) | static void pwd_char_hider_anim(lv_obj_t * ta, int32_t x)
function pwd_char_hider (line 1187) | static void pwd_char_hider(lv_obj_t * ta)
function char_is_accepted (line 1212) | static bool char_is_accepted(lv_obj_t * ta, uint32_t c)
function get_cursor_style (line 1241) | static void get_cursor_style(lv_obj_t * ta, lv_style_t * style_res)
function refr_cursor_area (line 1269) | static void refr_cursor_area(lv_obj_t * ta)
FILE: bdk/libs/lvgl/lv_objx/lv_ta.h
type lv_cursor_type_t (line 54) | typedef uint8_t lv_cursor_type_t;
type lv_ta_ext_t (line 57) | typedef struct
type lv_ta_style_t (line 84) | typedef uint8_t lv_ta_style_t;
function lv_ta_set_action (line 194) | static inline void lv_ta_set_action(lv_obj_t * ta, lv_action_t action)
function lv_ta_set_sb_mode (line 204) | static inline void lv_ta_set_sb_mode(lv_obj_t * ta, lv_sb_mode_t mode)
function lv_ta_set_scroll_propagation (line 214) | static inline void lv_ta_set_scroll_propagation(lv_obj_t * ta, bool en)
function lv_ta_set_edge_flash (line 224) | static inline void lv_ta_set_edge_flash(lv_obj_t * ta, bool en)
function lv_action_t (line 309) | static inline lv_action_t lv_ta_get_action(lv_obj_t * ta)
function lv_sb_mode_t (line 319) | static inline lv_sb_mode_t lv_ta_get_sb_mode(const lv_obj_t * ta)
function lv_ta_get_scroll_propagation (line 329) | static inline bool lv_ta_get_scroll_propagation(lv_obj_t * ta)
function lv_ta_get_edge_flash (line 339) | static inline bool lv_ta_get_edge_flash(lv_obj_t * ta)
FILE: bdk/libs/lvgl/lv_objx/lv_table.c
function lv_obj_t (line 53) | lv_obj_t * lv_table_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_table_set_cell_value (line 131) | void lv_table_set_cell_value(lv_obj_t * table, uint16_t row, uint16_t co...
function lv_table_set_row_cnt (line 165) | void lv_table_set_row_cnt(lv_obj_t * table, uint16_t row_cnt)
function lv_table_set_col_cnt (line 194) | void lv_table_set_col_cnt(lv_obj_t * table, uint16_t col_cnt)
function lv_table_set_col_width (line 229) | void lv_table_set_col_width(lv_obj_t * table, uint16_t col_id, lv_coord_...
function lv_table_set_cell_align (line 248) | void lv_table_set_cell_align(lv_obj_t * table, uint16_t row, uint16_t co...
function lv_table_set_cell_type (line 276) | void lv_table_set_cell_type(lv_obj_t * table, uint16_t row, uint16_t col...
function lv_table_set_cell_crop (line 307) | void lv_table_set_cell_crop(lv_obj_t * table, uint16_t row, uint16_t col...
function lv_table_set_cell_merge_right (line 336) | void lv_table_set_cell_merge_right(lv_obj_t * table, uint16_t row, uint1...
function lv_table_set_style (line 365) | void lv_table_set_style(lv_obj_t * table, lv_table_style_t type, lv_styl...
function lv_table_get_row_cnt (line 423) | uint16_t lv_table_get_row_cnt(lv_obj_t * table)
function lv_table_get_col_cnt (line 434) | uint16_t lv_table_get_col_cnt(lv_obj_t * table)
function lv_coord_t (line 446) | lv_coord_t lv_table_get_col_width(lv_obj_t * table, uint16_t col_id)
function lv_label_align_t (line 464) | lv_label_align_t lv_table_get_cell_align(lv_obj_t * table, uint16_t row,...
function lv_label_align_t (line 488) | lv_label_align_t lv_table_get_cell_type(lv_obj_t * table, uint16_t row, ...
function lv_label_align_t (line 512) | lv_label_align_t lv_table_get_cell_crop(lv_obj_t * table, uint16_t row, ...
function lv_table_get_cell_merge_right (line 536) | bool lv_table_get_cell_merge_right(lv_obj_t * table, uint16_t row, uint1...
function lv_style_t (line 560) | lv_style_t * lv_table_get_style(const lv_obj_t * table, lv_table_style_t...
function lv_table_design (line 602) | static bool lv_table_design(lv_obj_t * table, const lv_area_t * mask, lv...
function lv_res_t (line 746) | static lv_res_t lv_table_signal(lv_obj_t * table, lv_signal_t sign, void...
function refr_size (line 777) | static void refr_size(lv_obj_t * table)
function lv_coord_t (line 801) | static lv_coord_t get_row_height(lv_obj_t * table, uint16_t row_id)
FILE: bdk/libs/lvgl/lv_objx/lv_table.h
type lv_table_cell_format_t (line 44) | typedef union {
type lv_table_ext_t (line 55) | typedef struct {
type lv_table_style_t (line 73) | typedef uint8_t lv_table_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_tabview.c
function lv_obj_t (line 83) | lv_obj_t * lv_tabview_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_tabview_clean (line 203) | void lv_tabview_clean(lv_obj_t * obj)
function lv_obj_t (line 219) | lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
function lv_tabview_set_tab_act (line 286) | void lv_tabview_set_tab_act(lv_obj_t * tabview, uint16_t id, bool anim_en)
function lv_tabview_set_tab_load_action (line 359) | void lv_tabview_set_tab_load_action(lv_obj_t * tabview, lv_tabview_actio...
function lv_tabview_set_sliding (line 370) | void lv_tabview_set_sliding(lv_obj_t * tabview, bool en)
function lv_tabview_set_anim_time (line 381) | void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time)
function lv_tabview_set_style (line 396) | void lv_tabview_set_style(lv_obj_t * tabview, lv_tabview_style_t type, l...
function lv_tabview_set_btns_pos (line 434) | void lv_tabview_set_btns_pos(lv_obj_t * tabview, lv_tabview_btns_pos_t b...
function lv_tabview_set_btns_hidden (line 447) | void lv_tabview_set_btns_hidden(lv_obj_t *tabview, bool en)
function lv_tabview_get_tab_act (line 464) | uint16_t lv_tabview_get_tab_act(const lv_obj_t * tabview)
function lv_tabview_get_tab_count (line 475) | uint16_t lv_tabview_get_tab_count(const lv_obj_t * tabview)
function lv_obj_t (line 487) | lv_obj_t * lv_tabview_get_tab(const lv_obj_t * tabview, uint16_t id)
function lv_tabview_action_t (line 508) | lv_tabview_action_t lv_tabview_get_tab_load_action(const lv_obj_t * tabv...
function lv_tabview_get_sliding (line 519) | bool lv_tabview_get_sliding(const lv_obj_t * tabview)
function lv_tabview_get_anim_time (line 530) | uint16_t lv_tabview_get_anim_time(const lv_obj_t * tabview)
function lv_style_t (line 542) | lv_style_t * lv_tabview_get_style(const lv_obj_t * tabview, lv_tabview_s...
function lv_tabview_btns_pos_t (line 578) | lv_tabview_btns_pos_t lv_tabview_get_btns_pos(const lv_obj_t * tabview)
function lv_tabview_get_btns_hidden (line 589) | bool lv_tabview_get_btns_hidden(const lv_obj_t *tabview)
function lv_res_t (line 607) | static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, ...
function lv_res_t (line 677) | static lv_res_t tabpage_signal(lv_obj_t * tab_page, lv_signal_t sign, vo...
function lv_res_t (line 707) | static lv_res_t tabpage_scrl_signal(lv_obj_t * tab_scrl, lv_signal_t sig...
function tabpage_pressed_handler (line 737) | static void tabpage_pressed_handler(lv_obj_t * tabview, lv_obj_t * tabpage)
function tabpage_pressing_handler (line 751) | static void tabpage_pressing_handler(lv_obj_t * tabview, lv_obj_t * tabp...
function tabpage_press_lost_handler (line 790) | static void tabpage_press_lost_handler(lv_obj_t * tabview, lv_obj_t * ta...
function lv_res_t (line 830) | static lv_res_t tab_btnm_action(lv_obj_t * tab_btnm, const char * tab_name)
function tabview_realign (line 851) | static void tabview_realign(lv_obj_t * tabview)
FILE: bdk/libs/lvgl/lv_objx/lv_tabview.h
type lv_res_t (line 47) | typedef lv_res_t (*lv_tabview_action_t)(lv_obj_t *, uint16_t);
type lv_tabview_btns_pos_t (line 54) | typedef uint8_t lv_tabview_btns_pos_t;
type lv_tabview_ext_t (line 57) | typedef struct
type lv_tabview_style_t (line 86) | typedef uint8_t lv_tabview_style_t;
FILE: bdk/libs/lvgl/lv_objx/lv_tileview.c
function lv_obj_t (line 61) | lv_obj_t * lv_tileview_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_tileview_add_element (line 131) | void lv_tileview_add_element(lv_obj_t * element)
function lv_tileview_set_valid_positions (line 149) | void lv_tileview_set_valid_positions(lv_obj_t * tileview, const lv_point...
function lv_tileview_set_tile_act (line 162) | void lv_tileview_set_tile_act(lv_obj_t * tileview, lv_coord_t x, lv_coor...
function lv_tileview_set_tile_load_action (line 226) | void lv_tileview_set_tile_load_action(lv_obj_t * tileview, lv_tileview_a...
function lv_tileview_set_style (line 239) | void lv_tileview_set_style(lv_obj_t * tileview, lv_tileview_style_t type...
function lv_style_t (line 263) | lv_style_t * lv_tileview_get_style(const lv_obj_t * tileview, lv_tilevie...
function lv_res_t (line 296) | static lv_res_t lv_tileview_signal(lv_obj_t * tileview, lv_signal_t sign...
function lv_res_t (line 326) | static lv_res_t lv_tileview_scrl_signal(lv_obj_t * scrl, lv_signal_t sig...
function lv_res_t (line 438) | static lv_res_t element_signal_func(lv_obj_t * element, lv_signal_t sign...
function drag_end_handler (line 501) | static void drag_end_handler(lv_obj_t * tileview)
function set_valid_drag_dirs (line 555) | static bool set_valid_drag_dirs(lv_obj_t * tileview)
FILE: bdk/libs/lvgl/lv_objx/lv_tileview.h
type lv_res_t (line 39) | typedef lv_res_t (*lv_tileview_action_t)(lv_obj_t *, lv_coord_t, lv_coor...
type lv_tileview_ext_t (line 42) | typedef struct {
type lv_tileview_style_t (line 62) | typedef uint8_t lv_tileview_style_t;
function lv_tileview_set_edge_flash (line 114) | static inline void lv_tileview_set_edge_flash(lv_obj_t * tileview, bool en)
function lv_tileview_get_edge_flash (line 136) | static inline bool lv_tileview_get_edge_flash(lv_obj_t * tileview)
FILE: bdk/libs/lvgl/lv_objx/lv_win.c
function lv_obj_t (line 63) | lv_obj_t * lv_win_create(lv_obj_t * par, const lv_obj_t * copy)
function lv_win_clean (line 167) | void lv_win_clean(lv_obj_t * obj)
function lv_obj_t (line 184) | lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * img_src, const ch...
function lv_res_t (line 222) | lv_res_t lv_win_close_action(lv_obj_t * btn)
function lv_win_set_title (line 236) | void lv_win_set_title(lv_obj_t * win, const char * title)
function lv_win_set_btn_size (line 249) | void lv_win_set_btn_size(lv_obj_t * win, lv_coord_t size)
function lv_win_set_layout (line 264) | void lv_win_set_layout(lv_obj_t * win, lv_layout_t layout)
function lv_win_set_sb_mode (line 275) | void lv_win_set_sb_mode(lv_obj_t * win, lv_sb_mode_t sb_mode)
function lv_win_set_style (line 287) | void lv_win_set_style(lv_obj_t * win, lv_win_style_t type, lv_style_t * ...
function lv_win_set_drag (line 335) | void lv_win_set_drag(lv_obj_t *win, bool en)
function lv_obj_t (line 363) | lv_obj_t * lv_win_get_content(const lv_obj_t * win)
function lv_coord_t (line 374) | lv_coord_t lv_win_get_btn_size(const lv_obj_t * win)
function lv_obj_t (line 386) | lv_obj_t * lv_win_get_from_btn(const lv_obj_t * ctrl_btn)
function lv_layout_t (line 399) | lv_layout_t lv_win_get_layout(lv_obj_t * win)
function lv_sb_mode_t (line 410) | lv_sb_mode_t lv_win_get_sb_mode(lv_obj_t * win)
function lv_coord_t (line 421) | lv_coord_t lv_win_get_width(lv_obj_t * win)
function lv_style_t (line 436) | lv_style_t * lv_win_get_style(const lv_obj_t * win, lv_win_style_t type)
function lv_win_focus (line 481) | void lv_win_focus(lv_obj_t * win, lv_obj_t * obj, uint16_t anim_time)
function lv_res_t (line 498) | static lv_res_t lv_win_signal(lv_obj_t * win, lv_signal_t sign, void * p...
function lv_win_realign (line 554) | static void lv_win_realign(lv_obj_t * win)
FILE: bdk/libs/lvgl/lv_objx/lv_win.h
type lv_win_ext_t (line 74) | typedef struct
type lv_win_style_t (line 96) | typedef uint8_t lv_win_style_t;
function lv_win_get_drag (line 250) | static inline bool lv_win_get_drag(const lv_obj_t *win)
function lv_win_scroll_hor (line 272) | static inline void lv_win_scroll_hor(lv_obj_t * win, lv_coord_t dist)
function lv_win_scroll_ver (line 282) | static inline void lv_win_scroll_ver(lv_obj_t * win, lv_coord_t dist)
FILE: bdk/libs/lvgl/lv_themes/lv_theme.c
function lv_theme_set_current (line 58) | void lv_theme_set_current(lv_theme_t * th)
function lv_theme_t (line 100) | lv_theme_t * lv_theme_get_current(void)
FILE: bdk/libs/lvgl/lv_themes/lv_theme.h
type lv_theme_t (line 48) | typedef struct {
FILE: bdk/libs/lvgl/lv_themes/lv_theme_hekate.c
function basic_init (line 80) | static void basic_init(void)
function cont_init (line 122) | static void cont_init(void)
function btn_init (line 134) | static void btn_init(void)
function label_init (line 188) | static void label_init(void)
function line_init (line 209) | static void line_init(void)
function led_init (line 219) | static void led_init(void)
function bar_init (line 237) | static void bar_init(void)
function slider_init (line 261) | static void slider_init(void)
function sw_init (line 283) | static void sw_init(void)
function lmeter_init (line 310) | static void lmeter_init(void)
function gauge_init (line 325) | static void gauge_init(void)
function arc_init (line 344) | static void arc_init(void)
function preload_init (line 363) | static void preload_init(void)
function chart_init (line 371) | static void chart_init(void)
function calendar_init (line 378) | static void calendar_init(void)
function cb_init (line 416) | static void cb_init(void)
function btnm_init (line 450) | static void btnm_init(void)
function kb_init (line 496) | static void kb_init(void)
function mbox_init (line 523) | static void mbox_init(void)
function page_init (line 546) | static void page_init(void)
function ta_init (line 555) | static void ta_init(void)
function spinbox_init (line 582) | static void spinbox_init(void)
function list_init (line 591) | static void list_init(void)
function ddlist_init (line 646) | static void ddlist_init(void)
function roller_init (line 671) | static void roller_init(void)
function tabview_init (line 692) | static void tabview_init(void)
function tileview_init (line 760) | static void tileview_init(void)
function table_init (line 769) | static void table_init(void)
function win_init (line 784) | static void win_init(void)
function lv_theme_t (line 836) | lv_theme_t * lv_theme_hekate_init(uint32_t bg_color, uint16_t hue, lv_fo...
function lv_theme_t (line 889) | lv_theme_t * lv_theme_get_hekate(void)
FILE: bdk/mem/emc_t210.h
type emc_mr_t (line 722) | typedef enum _emc_mr_t
type emc_mr_chip_data_t (line 738) | typedef struct _emc_mr_chip_data_t
type emc_mr_data_t (line 749) | typedef struct _emc_mr_data_t
type emc_regs_t210_t (line 755) | typedef struct _emc_regs_t210_t {
FILE: bdk/mem/heap.c
function _heap_create (line 26) | static void _heap_create(void *start)
function _heap_free (line 116) | static void _heap_free(void *addr)
function heap_init (line 157) | void heap_init(void *base)
function heap_set (line 162) | void heap_set(heap_t *heap)
function free (line 184) | void free(void *buf)
function heap_monitor (line 189) | void heap_monitor(heap_monitor_t *mon, bool print_node_stats)
FILE: bdk/mem/heap.h
type hnode_t (line 23) | typedef struct _hnode
type heap_t (line 32) | typedef struct _heap
type heap_monitor_t (line 39) | typedef struct
FILE: bdk/mem/mc.c
function mc_config_carveout_hos (line 27) | void mc_config_carveout_hos()
function mc_enable_ahb_redirect (line 110) | void mc_enable_ahb_redirect(u32 offset)
function mc_disable_ahb_redirect (line 119) | void mc_disable_ahb_redirect()
function mc_client_has_access (line 129) | bool mc_client_has_access(void *address)
function mc_enable (line 141) | void mc_enable()
FILE: bdk/mem/mc_t210.h
type mc_regs_t210_t (line 744) | typedef struct _mc_regs_t210_t {
FILE: bdk/mem/minerva.c
function minerva_init (line 40) | int minerva_init(minerva_str_t *mtc_str)
function minerva_change_freq (line 134) | void minerva_change_freq(minerva_freq_t freq)
function minerva_deinit (line 152) | void minerva_deinit()
function minerva_sdmmc_la_program (line 161) | void minerva_sdmmc_la_program(void *table, bool t210b01)
function minerva_prep_boot_hos (line 181) | void minerva_prep_boot_hos()
function minerva_prep_boot_l4t (line 204) | void minerva_prep_boot_l4t(u32 oc_freq, u32 opt_custom, bool prg_sdmmc_la)
function minerva_periodic_training (line 269) | void minerva_periodic_training()
function emc_table_t (line 281) | emc_table_t *minerva_get_mtc_table()
function minerva_get_mtc_table_entries (line 289) | int minerva_get_mtc_table_entries()
FILE: bdk/mem/minerva.h
type mtc_config_t (line 29) | typedef struct
type minerva_str_t (line 45) | typedef struct
type train_mode_t (line 51) | enum train_mode_t
type minerva_freq_t (line 60) | typedef enum
FILE: bdk/mem/mtc_table.h
type pllm_clk_config_t (line 25) | typedef struct
type burst_regs_t (line 34) | typedef struct
type burst_regs_table_t (line 260) | typedef struct
type ptfv_list_table_t (line 269) | typedef struct
type burst_reg_per_ch_t (line 285) | typedef struct
type trim_regs_t (line 297) | typedef struct
type trim_perch_regs_t (line 439) | typedef struct
type dram_timings_t (line 453) | typedef struct
type vref_perch_regs_t (line 462) | typedef struct
type trim_regs_table_t (line 470) | typedef struct
type emc_table_t (line 477) | typedef struct
FILE: bdk/mem/sdram.c
type sdram_vendor_patch_t (line 40) | typedef struct _sdram_vendor_patch_t
function _sdram_wait_emc_status (line 88) | static int _sdram_wait_emc_status(u32 reg_offset, u32 bit_mask, bool upd...
function _sdram_req_mrr_data (line 117) | static void _sdram_req_mrr_data(u32 data, bool dual_channel)
function emc_mr_data_t (line 125) | emc_mr_data_t sdram_read_mrx(emc_mr_t mrx)
function _sdram_config_t210 (line 185) | static void _sdram_config_t210(const sdram_params_t210_t *params)
function _sdram_config_t210b01 (line 798) | static void _sdram_config_t210b01(const sdram_params_t210b01_t *params)
function sdram_init (line 1523) | void sdram_init()
FILE: bdk/mem/sdram.h
type sdram_ids_erista (line 42) | enum sdram_ids_erista
type sdram_ids_mariko (line 62) | enum sdram_ids_mariko
type sdram_codes_mariko (line 115) | enum sdram_codes_mariko
FILE: bdk/mem/sdram_param_t210.h
type sdram_params_t210_t (line 40) | typedef struct _sdram_params_t210_t
FILE: bdk/mem/sdram_param_t210b01.h
type sdram_params_t210b01_t (line 17) | typedef struct _sdram_params_t210b01_t
FILE: bdk/mem/smmu.c
function pde_t (line 85) | static pde_t *_smmu_pdir_alloc()
function _smmu_flush_regs (line 96) | static void _smmu_flush_regs()
function smmu_flush_all (line 101) | void smmu_flush_all()
function smmu_init (line 112) | void smmu_init()
function smmu_enable (line 122) | void smmu_enable()
function smmu_disable (line 137) | void smmu_disable()
function smmu_reset_heap (line 162) | void smmu_reset_heap()
function smmu_domain_deinit (line 182) | void smmu_domain_deinit(u32 dev_base, u32 asid)
function smmu_domain_bypass (line 190) | void smmu_domain_bypass(u32 dev_base, bool bypass)
function pte_t (line 207) | static pte_t *_smmu_get_pte(pde_t *pdir, u32 iova)
function smmu_map (line 238) | void smmu_map(void *ptb, u32 iova, u64 iopa, u32 pages, u32 attr)
function smmu_map_huge (line 255) | void smmu_map_huge(void *ptb, u32 iova, u64 iopa, u32 regions, u32 attr)
FILE: bdk/mem/smmu.h
type pde_t (line 32) | typedef struct _pde_t {
type pte_t (line 55) | typedef struct _pte_t {
FILE: bdk/module.h
type bdk_params_t (line 33) | typedef struct _bdkParams_t
FILE: bdk/power/bm92t36.c
type pd_object_t (line 66) | typedef struct _pd_object_t {
function _bm92t36_read_reg (line 73) | static int _bm92t36_read_reg(u8 *buf, u32 size, u32 reg)
function bm92t36_get_version (line 79) | int bm92t36_get_version(u32 *value)
function bm92t36_get_source_info (line 98) | void bm92t36_get_source_info(bool *inserted, usb_pd_objects_t *usb_pd)
FILE: bdk/power/bm92t36.h
type usb_pd_object_t (line 26) | typedef struct _usb_pd_object_t
type usb_pd_objects_t (line 32) | typedef struct _usb_pd_objects_t
FILE: bdk/power/bq24193.c
function u8 (line 23) | static u8 bq24193_get_reg(u8 reg)
function bq24193_get_version (line 28) | int bq24193_get_version(u32 *value)
function bq24193_get_property (line 40) | int bq24193_get_property(enum BQ24193_reg_prop prop, int *value)
function bq24193_enable_charger (line 170) | void bq24193_enable_charger()
function bq24193_fake_battery_removal (line 180) | void bq24193_fake_battery_removal()
FILE: bdk/power/bq24193.h
type BQ24193_reg (line 91) | enum BQ24193_reg {
type BQ24193_reg_prop (line 105) | enum BQ24193_reg_prop {
type BQ24193_reg_prop (line 120) | enum BQ24193_reg_prop
FILE: bdk/power/max17050.c
function u16 (line 54) | static u16 max17050_get_reg(u8 reg)
function max17050_get_version (line 63) | int max17050_get_version(u32 *value)
function max17050_get_property (line 75) | int max17050_get_property(enum MAX17050_reg reg, int *value)
function _max17050_write_verify_reg (line 146) | static int _max17050_write_verify_reg(u8 reg, u16 value)
function _max17050_override_por (line 162) | static void _max17050_override_por(u8 reg, u16 value)
function _max17050_load_new_capacity_params (line 168) | static void _max17050_load_new_capacity_params()
function _max17050_reset_vfsoc0_reg (line 190) | static void _max17050_reset_vfsoc0_reg()
function _max17050_update_capacity_regs (line 204) | static void _max17050_update_capacity_regs()
function _max17050_write_config_regs (line 212) | static void _max17050_write_config_regs()
function _max17050_override_por_values (line 230) | static void _max17050_override_por_values()
function _max17050_set_por_bit (line 245) | static void _max17050_set_por_bit(u16 value)
function max17050_fix_configuration (line 250) | void max17050_fix_configuration()
function max17050_dump_regs (line 286) | void max17050_dump_regs(void *buf)
FILE: bdk/power/max17050.h
type MAX17050_reg (line 30) | enum MAX17050_reg {
type MAX17050_reg (line 123) | enum MAX17050_reg
FILE: bdk/power/max77620.h
type max77620_fps_src (line 372) | enum max77620_fps_src {
FILE: bdk/power/max7762x.c
type max77620_fps_t (line 31) | typedef struct _max77620_fps_t
type max77621_ctrl_t (line 39) | typedef struct _max77621_ctrl_t
type max77812_en_t (line 47) | typedef struct _max77812_ctrl_t
type max77620_regulator_t (line 55) | typedef struct _max77620_regulator_t
function u8 (line 98) | static u8 _max77812_get_address()
function u8 (line 111) | static u8 _max7762x_get_i2c_address(u32 id)
function _max7762x_set_reg (line 135) | static void _max7762x_set_reg(u8 addr, u8 reg, u8 val)
function max77620_regulator_get_status (line 148) | int max77620_regulator_get_status(u32 id)
function max77620_regulator_config_fps (line 166) | int max77620_regulator_config_fps(u32 id)
function max7762x_regulator_set_voltage (line 183) | int max7762x_regulator_set_voltage(u32 id, u32 uv)
function max7762x_regulator_enable (line 215) | int max7762x_regulator_enable(u32 id, bool enable)
function max77620_config_gpio (line 278) | void max77620_config_gpio(u32 gpio_id, bool enable)
function max77621_config_default (line 295) | void max77621_config_default(u32 id, bool por)
function max77620_config_default (line 323) | void max77620_config_default()
function max77620_low_battery_monitor_config (line 343) | void max77620_low_battery_monitor_config(bool enable)
FILE: bdk/power/regulator_5v.c
function regulator_5v_enable (line 28) | void regulator_5v_enable(u8 dev)
function regulator_5v_disable (line 60) | void regulator_5v_disable(u8 dev)
function regulator_5v_get_dev_enabled (line 82) | bool regulator_5v_get_dev_enabled(u8 dev)
function regulator_5v_usb_src_enable (line 87) | void regulator_5v_usb_src_enable(bool enable)
FILE: bdk/rtc/max77620-rtc.c
function max77620_rtc_prep_read (line 29) | void max77620_rtc_prep_read()
function max77620_rtc_get_time (line 34) | void max77620_rtc_get_time(rtc_time_t *time)
function max77620_rtc_stop_alarm (line 76) | void max77620_rtc_stop_alarm()
function max77620_rtc_epoch_to_date (line 96) | void max77620_rtc_epoch_to_date(u32 epoch, rtc_time_t *time)
function u32 (line 138) | u32 max77620_rtc_date_to_epoch(const rtc_time_t *time)
function max77620_rtc_get_time_adjusted (line 165) | void max77620_rtc_get_time_adjusted(rtc_time_t *time)
function max77620_rtc_set_auto_dst (line 181) | void max77620_rtc_set_auto_dst(bool enable)
function max77620_rtc_set_epoch_offset (line 186) | void max77620_rtc_set_epoch_offset(int offset)
function max77620_rtc_set_reboot_reason (line 191) | void max77620_rtc_set_reboot_reason(rtc_reboot_reason_t *rr)
function max77620_rtc_get_reboot_reason (line 208) | bool max77620_rtc_get_reboot_reason(rtc_reboot_reason_t *rr)
FILE: bdk/rtc/max77620-rtc.h
type rtc_time_t (line 67) | typedef struct _rtc_time_t {
type rtc_rr_decoded_t (line 88) | typedef struct _rtc_rr_decoded_t
type rtc_rr_encoded_t (line 96) | typedef struct _rtc_rr_encoded_t
type rtc_reboot_reason_t (line 102) | typedef struct _rtc_reboot_reason_t
FILE: bdk/sec/se.c
type se_ll_t (line 28) | typedef struct _se_ll_t
function _se_ls_1bit (line 38) | static void _se_ls_1bit(void *buf)
function _se_ls_1bit_le (line 54) | static void _se_ls_1bit_le(void *buf)
function _se_ll_set (line 70) | static void _se_ll_set(se_ll_t *ll, u32 addr, u32 size)
function _se_op_wait (line 77) | static int _se_op_wait()
function _se_execute_finalize (line 127) | static int _se_execute_finalize()
function _se_execute (line 137) | static int _se_execute(u32 op, void *dst, u32 dst_size, const void *src,...
function _se_execute_oneshot (line 176) | static int _se_execute_oneshot(u32 op, void *dst, u32 dst_size, const vo...
function _se_execute_aes_oneshot (line 181) | static int _se_execute_aes_oneshot(void *dst, const void *src, u32 size)
function _se_aes_counter_set (line 220) | static void _se_aes_counter_set(const void *ctr)
function se_rsa_acc_ctrl (line 229) | void se_rsa_acc_ctrl(u32 rs, u32 flags)
function se_key_acc_ctrl (line 239) | void se_key_acc_ctrl(u32 ks, u32 flags)
function u32 (line 247) | u32 se_key_acc_ctrl_get(u32 ks)
function se_aes_key_set (line 252) | void se_aes_key_set(u32 ks, const void *key, u32 size)
function se_aes_iv_set (line 265) | void se_aes_iv_set(u32 ks, const void *iv, u32 size)
function se_aes_key_get (line 278) | void se_aes_key_get(u32 ks, void *key, u32 size)
function se_aes_key_clear (line 292) | void se_aes_key_clear(u32 ks)
function se_aes_iv_clear (line 302) | void se_aes_iv_clear(u32 ks)
function se_aes_unwrap_key (line 312) | int se_aes_unwrap_key(u32 ks_dst, u32 ks_src, const void *seed)
function se_aes_crypt_ecb (line 322) | int se_aes_crypt_ecb(u32 ks, int enc, void *dst, const void *src, u32 size)
function se_aes_crypt_cbc (line 340) | int se_aes_crypt_cbc(u32 ks, int enc, void *dst, const void *src, u32 size)
function se_aes_crypt_ofb (line 358) | int se_aes_crypt_ofb(u32 ks, void *dst, const void *src, u32 size)
function se_aes_crypt_ctr (line 368) | int se_aes_crypt_ctr(u32 ks, void *dst, const void *src, u32 size, void ...
function se_aes_crypt_xts_sec (line 381) | int se_aes_crypt_xts_sec(u32 tweak_ks, u32 crypt_ks, int enc, u64 sec, v...
function se_aes_crypt_xts_sec_nx (line 417) | int se_aes_crypt_xts_sec_nx(u32 tweak_ks, u32 crypt_ks, int enc, u64 sec...
function se_aes_crypt_xts (line 469) | int se_aes_crypt_xts(u32 tweak_ks, u32 crypt_ks, int enc, u64 sec, void ...
function _se_sha_hash_256_get_hash (line 481) | static void _se_sha_hash_256_get_hash(void *hash)
function _se_sha_hash_256 (line 490) | static int _se_sha_hash_256(void *hash, u64 total_size, const void *src,...
function se_sha_hash_256_async (line 538) | int se_sha_hash_256_async(void *hash, const void *src, u32 size)
function se_sha_hash_256_oneshot (line 543) | int se_sha_hash_256_oneshot(void *hash, const void *src, u32 size)
function se_sha_hash_256_partial_start (line 548) | int se_sha_hash_256_partial_start(void *hash, const void *src, u32 size,...
function se_sha_hash_256_partial_update (line 557) | int se_sha_hash_256_partial_update(void *hash, const void *src, u32 size...
function se_sha_hash_256_partial_end (line 566) | int se_sha_hash_256_partial_end(void *hash, u64 total_size, const void *...
function se_sha_hash_256_finalize (line 571) | int se_sha_hash_256_finalize(void *hash)
function se_rng_pseudo (line 580) | int se_rng_pseudo(void *dst, u32 size)
function se_aes_ctx_get_keys (line 618) | void se_aes_ctx_get_keys(u8 *buf, u8 *keys, u32 keysize)
function se_aes_hash_cmac (line 674) | int se_aes_hash_cmac(u32 ks, void *hash, const void *src, u32 size)
FILE: bdk/sec/tsec.c
function _tsec_dma_wait_idle (line 41) | static int _tsec_dma_wait_idle()
function _tsec_dma_pa_to_internal_100 (line 52) | static int _tsec_dma_pa_to_internal_100(int not_imem, int i_offset, int ...
function tsec_query (line 68) | int tsec_query(void *tsec_keys, tsec_ctxt_t *tsec_ctxt)
FILE: bdk/sec/tsec.h
type tsec_fw_type (line 23) | enum tsec_fw_type
type tsec_ctxt_t (line 31) | typedef struct _tsec_ctxt_t
FILE: bdk/soc/actmon.c
type actmon_dev_reg_t (line 83) | typedef struct _actmon_dev_reg_t
function actmon_hist_enable (line 99) | void actmon_hist_enable(actmon_hist_src_t src)
function actmon_hist_disable (line 105) | void actmon_hist_disable()
function actmon_hist_get (line 110) | void actmon_hist_get(u32 *histogram)
function actmon_dev_enable (line 119) | void actmon_dev_enable(actmon_dev_t dev)
function actmon_dev_disable (line 129) | void actmon_dev_disable(actmon_dev_t dev)
function u32 (line 136) | u32 actmon_dev_get_load(actmon_dev_t dev)
function u32 (line 146) | u32 actmon_dev_get_load_avg(actmon_dev_t dev)
function atmon_dev_all_disable (line 156) | void atmon_dev_all_disable()
function actmon_init (line 161) | void actmon_init()
function actmon_end (line 169) | void actmon_end()
FILE: bdk/soc/actmon.h
type actmon_dev_t (line 24) | typedef enum _actmon_dev_t
type actmon_hist_src_t (line 37) | typedef enum _actmon_hist_src_t
FILE: bdk/soc/bpmp.c
function bpmp_mmu_maintenance (line 127) | void bpmp_mmu_maintenance(u32 op, bool force)
function bpmp_mmu_set_entry (line 143) | void bpmp_mmu_set_entry(int idx, const bpmp_mmu_entry_t *entry, bool apply)
function bpmp_mmu_enable (line 163) | void bpmp_mmu_enable()
function bpmp_mmu_disable (line 191) | void bpmp_mmu_disable()
function bpmp_clk_rate_relaxed (line 218) | void bpmp_clk_rate_relaxed(bool enable)
function bpmp_clk_rate_get (line 254) | void bpmp_clk_rate_get()
function bpmp_clk_rate_set (line 276) | void bpmp_clk_rate_set(bpmp_freq_t fid)
function bpmp_state_set (line 305) | void bpmp_state_set(bpmp_state_t state)
function bpmp_usleep (line 313) | void bpmp_usleep(u32 us)
function bpmp_msleep (line 327) | void bpmp_msleep(u32 ms)
function bpmp_halt (line 341) | void bpmp_halt()
FILE: bdk/soc/bpmp.h
type bpmp_maintenance_t (line 24) | typedef enum
type bpmp_mmu_entry_t (line 38) | typedef struct _bpmp_mmu_entry_t
type bpmp_freq_t (line 46) | typedef enum
type bpmp_state_t (line 57) | typedef enum
FILE: bdk/soc/ccplex.c
function _ccplex_enable_power_t210 (line 32) | static void _ccplex_enable_power_t210()
function _ccplex_enable_power_t210b01 (line 47) | static void _ccplex_enable_power_t210b01()
function _ccplex_disable_power (line 54) | static void _ccplex_disable_power()
function ccplex_boot_cpu0 (line 66) | void ccplex_boot_cpu0(u32 entry, bool lock)
function ccplex_powergate_cpu0 (line 129) | void ccplex_powergate_cpu0()
FILE: bdk/soc/clock.c
type clk_rst_mgd_t (line 45) | typedef struct _clk_rst_mgd_t
type clock_osc_t (line 53) | typedef struct _clock_osc_t
function clock_enable (line 163) | void clock_enable(const clk_rst_t *clk)
function clock_disable (line 188) | void clock_disable(const clk_rst_t *clk)
function clock_enable_fuse (line 199) | void clock_enable_fuse(bool enable)
function clock_enable_uart (line 205) | void clock_enable_uart(u32 idx)
function clock_disable_uart (line 216) | void clock_disable_uart(u32 idx)
function clock_uart_use_src_div (line 223) | int clock_uart_use_src_div(u32 idx, u32 baud)
function clock_enable_i2c (line 241) | void clock_enable_i2c(u32 idx)
function clock_disable_i2c (line 252) | void clock_disable_i2c(u32 idx)
function clock_enable_se (line 257) | void clock_enable_se()
function clock_enable_tzram (line 266) | void clock_enable_tzram()
function clock_enable_host1x (line 271) | void clock_enable_host1x()
function clock_disable_host1x (line 279) | void clock_disable_host1x()
function clock_enable_tsec (line 284) | void clock_enable_tsec()
function clock_disable_tsec (line 289) | void clock_disable_tsec()
function clock_enable_nvdec (line 294) | void clock_enable_nvdec()
function clock_disable_nvdec (line 299) | void clock_disable_nvdec()
function clock_enable_nvjpg (line 304) | void clock_enable_nvjpg()
function clock_disable_nvjpg (line 309) | void clock_disable_nvjpg()
function clock_enable_vic (line 314) | void clock_enable_vic()
function clock_disable_vic (line 328) | void clock_disable_vic()
function clock_enable_sor_safe (line 333) | void clock_enable_sor_safe()
function clock_disable_sor_safe (line 338) | void clock_disable_sor_safe()
function clock_enable_sor0 (line 343) | void clock_enable_sor0()
function clock_disable_sor0 (line 348) | void clock_disable_sor0()
function clock_enable_sor1 (line 353) | void clock_enable_sor1()
function clock_disable_sor1 (line 358) | void clock_disable_sor1()
function clock_enable_kfuse (line 363) | void clock_enable_kfuse()
function clock_disable_kfuse (line 374) | void clock_disable_kfuse()
function clock_enable_cl_dvfs (line 379) | void clock_enable_cl_dvfs()
function clock_disable_cl_dvfs (line 384) | void clock_disable_cl_dvfs()
function clock_enable_coresight (line 389) | void clock_enable_coresight()
function clock_disable_coresight (line 394) | void clock_disable_coresight()
function clock_enable_pwm (line 399) | void clock_enable_pwm()
function clock_disable_pwm (line 410) | void clock_disable_pwm()
function clock_enable_apbdma (line 415) | void clock_enable_apbdma()
function clock_disable_apbdma (line 420) | void clock_disable_apbdma()
function clock_enable_ahbdma (line 425) | void clock_enable_ahbdma()
function clock_disable_ahbdma (line 430) | void clock_disable_ahbdma()
function clock_enable_actmon (line 435) | void clock_enable_actmon()
function clock_disable_actmon (line 440) | void clock_disable_actmon()
function clock_enable_extperiph1 (line 445) | void clock_enable_extperiph1()
function clock_disable_extperiph1 (line 453) | void clock_disable_extperiph1()
function clock_enable_extperiph2 (line 459) | void clock_enable_extperiph2()
function clock_disable_extperiph2 (line 467) | void clock_disable_extperiph2()
function _clock_pll_wait_lock (line 473) | static void _clock_pll_wait_lock(u32 base, u32 max_delay)
function clock_enable_plld (line 485) | void clock_enable_plld(u32 divp, u32 divn, bool lowpower, bool tegra_t210)
function clock_enable_pllx (line 508) | void clock_enable_pllx()
function clock_enable_pllc (line 533) | void clock_enable_pllc(u32 divn)
function clock_disable_pllc (line 570) | void clock_disable_pllc()
function _clock_enable_pllc4 (line 586) | static void _clock_enable_pllc4(u32 mask)
function _clock_disable_pllc4 (line 611) | static void _clock_disable_pllc4(u32 mask)
function clock_enable_pllu (line 628) | void clock_enable_pllu()
function clock_disable_pllu (line 644) | void clock_disable_pllu()
function clock_enable_utmipll (line 651) | void clock_enable_utmipll()
function _clock_sdmmc_in_reset (line 667) | static int _clock_sdmmc_in_reset(u32 id)
function _clock_sdmmc_set_reset (line 674) | static void _clock_sdmmc_set_reset(u32 id)
function _clock_sdmmc_clr_reset (line 681) | static void _clock_sdmmc_clr_reset(u32 id)
function _clock_sdmmc_is_enabled (line 688) | static int _clock_sdmmc_is_enabled(u32 id)
function _clock_sdmmc_set_enable (line 695) | static void _clock_sdmmc_set_enable(u32 id)
function _clock_sdmmc_clr_enable (line 702) | static void _clock_sdmmc_clr_enable(u32 id)
function _clock_sdmmc_config_legacy_tm (line 709) | static void _clock_sdmmc_config_legacy_tm()
type clock_sdmmc_t (line 717) | typedef struct _clock_sdmmc_t
function _clock_sdmmc_config_clock_host (line 730) | static int _clock_sdmmc_config_clock_host(u32 *pclock, u32 id, u32 clock)
function clock_sdmmc_config_clock_source (line 819) | void clock_sdmmc_config_clock_source(u32 *pclock, u32 id, u32 clock)
function clock_sdmmc_get_card_clock_div (line 849) | void clock_sdmmc_get_card_clock_div(u32 *pclock, u16 *pdivisor, u32 type)
function clock_sdmmc_is_active (line 922) | int clock_sdmmc_is_active(u32 id)
function clock_sdmmc_enable (line 927) | void clock_sdmmc_enable(u32 id, u32 clock)
function clock_sdmmc_disable (line 952) | void clock_sdmmc_disable(u32 id)
function u32 (line 960) | u32 clock_get_osc_freq()
function u32 (line 976) | u32 clock_get_dev_freq(clock_pto_id_t id)
FILE: bdk/soc/clock.h
type clock_pto_id_t (line 232) | typedef enum _clock_pto_id_t
type CLK_L_DEV (line 473) | enum CLK_L_DEV
type CLK_H_DEV (line 503) | enum CLK_H_DEV
type CLK_U_DEV (line 527) | enum CLK_U_DEV
type CLK_V_DEV (line 557) | enum CLK_V_DEV
type CLK_W_DEV (line 582) | enum CLK_W_DEV
type CLK_X_DEV (line 612) | enum CLK_X_DEV
type CLK_Y_DEV (line 642) | enum CLK_Y_DEV
type clk_rst_t (line 678) | typedef struct _clk_rst_t
FILE: bdk/soc/fuse.c
function fuse_disable_program (line 66) | void fuse_disable_program()
function u32 (line 71) | u32 fuse_read_odm(u32 idx)
function u32 (line 76) | u32 fuse_read_odm_keygen_rev()
function fuse_force_8gb_dramid (line 94) | void fuse_force_8gb_dramid()
function u32 (line 100) | u32 fuse_read_dramid(bool raw_id)
function u32 (line 134) | u32 fuse_read_hw_state()
function u32 (line 142) | u32 fuse_read_hw_type()
function fuse_set_sbk (line 161) | int fuse_set_sbk()
function fuse_wait_idle (line 185) | void fuse_wait_idle()
function fuse_sense (line 191) | void fuse_sense()
function u32 (line 210) | u32 fuse_read(u32 addr)
function u32 (line 220) | u32 fuse_read_array(u32 *words)
function u32 (line 231) | static u32 _parity32_even(const u32 *words, u32 count)
function _patch_hash_one (line 247) | static int _patch_hash_one(u32 *word)
function _patch_hash_multi (line 284) | static int _patch_hash_multi(u32 *words, u32 count)
function fuse_read_ipatch (line 340) | int fuse_read_ipatch(void (*ipatch)(u32 offset, u32 value))
function fuse_read_evp_thunk (line 400) | int fuse_read_evp_thunk(u32 *iram_evp_thunks, u32 *iram_evp_thunks_len)
function fuse_check_patched_rcm (line 487) | bool fuse_check_patched_rcm()
FILE: bdk/soc/gpio.c
function gpio_config (line 57) | void gpio_config(u32 port, u32 pins, int mode)
function gpio_output_enable (line 69) | void gpio_output_enable(u32 port, u32 pins, int enable)
function gpio_write (line 81) | void gpio_write(u32 port, u32 pins, int high)
function gpio_direction_input (line 93) | void gpio_direction_input(u32 port, u32 pins)
function gpio_direction_output (line 99) | void gpio_direction_output(u32 port, u32 pins, int high)
function gpio_read (line 106) | int gpio_read(u32 port, u32 pins)
function gpio_set_debounce (line 113) | void gpio_set_debounce(u32 port, u32 pins, u32 ms)
function _gpio_interrupt_clear (line 133) | static void _gpio_interrupt_clear(u32 port, u32 pins)
function gpio_interrupt_status (line 142) | int gpio_interrupt_status(u32 port, u32 pins)
function gpio_interrupt_enable (line 156) | void gpio_interrupt_enable(u32 port, u32 pins, int enable)
function gpio_interrupt_level (line 171) | void gpio_interrupt_level(u32 port, u32 pins, int high, int edge, int de...
function u32 (line 200) | u32 gpio_get_bank_irq_id(u32 port)
FILE: bdk/soc/hw_init.c
function u32 (line 53) | u32 hw_get_chip_id()
function _config_oscillators (line 70) | static void _config_oscillators()
function hw_config_arbiter (line 93) | void hw_config_arbiter(bool reset)
function _config_gpios (line 112) | static void _config_gpios(bool nx_hoag)
function _config_pmc_scratch (line 148) | static void _config_pmc_scratch()
function _mbist_workaround_bl (line 155) | static void _mbist_workaround_bl()
function _config_se_brom (line 271) | static void _config_se_brom()
function _config_regulators (line 302) | static void _config_regulators(bool tegra_t210, bool nx_hoag)
function hw_init (line 375) | void hw_init()
function hw_deinit (line 471) | void hw_deinit(bool keep_display)
FILE: bdk/soc/i2c.c
function _i2c_load_cfg_wait (line 91) | static void _i2c_load_cfg_wait(vu32 *base)
function _i2c_send_normal (line 102) | static int _i2c_send_normal(u32 i2c_idx, u32 dev_addr, const u8 *buf, u3...
function _i2c_recv_normal (line 150) | static int _i2c_recv_normal(u32 i2c_idx, u8 *buf, u32 size, u32 dev_addr)
function _i2c_send_packet (line 192) | static int _i2c_send_packet(u32 i2c_idx, const u8 *buf, u32 size, u32 de...
function i2c_xfer_packet (line 254) | int i2c_xfer_packet(u32 i2c_idx, u32 dev_addr, const u8 *tx_buf, u32 tx_...
function i2c_init (line 343) | void i2c_init(u32 i2c_idx)
function i2c_send_buf_big (line 364) | int i2c_send_buf_big(u32 i2c_idx, u32 dev_addr, const u8 *buf, u32 size)
function i2c_recv_buf_big (line 369) | int i2c_recv_buf_big(u8 *buf, u32 size, u32 i2c_idx, u32 dev_addr, u32 reg)
function i2c_send_buf_small (line 374) | int i2c_send_buf_small(u32 i2c_idx, u32 dev_addr, u32 reg, const u8 *buf...
function i2c_recv_buf_small (line 386) | int i2c_recv_buf_small(u8 *buf, u32 size, u32 i2c_idx, u32 dev_addr, u32...
function i2c_send_byte (line 394) | int i2c_send_byte(u32 i2c_idx, u32 dev_addr, u32 reg, u8 val)
function u8 (line 399) | u8 i2c_recv_byte(u32 i2c_idx, u32 dev_addr, u32 reg)
FILE: bdk/soc/irq.c
type irq_ctxt_t (line 35) | typedef struct _irq_ctxt_t
function _irq_enable_source (line 46) | static void _irq_enable_source(u32 irq)
function _irq_disable_source (line 58) | static void _irq_disable_source(u32 irq)
function _irq_disable_and_ack_all (line 67) | static void _irq_disable_and_ack_all()
function irq_free (line 77) | void irq_free(u32 irq)
function _irq_free_all (line 93) | static void _irq_free_all()
function irq_status_t (line 109) | static irq_status_t _irq_handle_source(u32 irq)
function irq_handler (line 139) | void irq_handler()
function _irq_init (line 161) | static void _irq_init()
function irq_end (line 168) | void irq_end()
function irq_wait_event (line 178) | void irq_wait_event(u32 irq)
function irq_disable_wait_event (line 192) | void irq_disable_wait_event()
function irq_status_t (line 197) | irq_status_t irq_request(u32 irq, irq_handler_t handler, void *data, irq...
function fiq_setup (line 226) | void __attribute__ ((target("arm"))) fiq_setup()
function fiq_handler (line 249) | void __attribute__ ((target("arm"), interrupt ("FIQ"))) fiq_handler()
FILE: bdk/soc/irq.h
type irq_status_t (line 199) | typedef enum _irq_status_t
type irq_flags_t (line 210) | typedef enum _irq_flags_t
FILE: bdk/soc/kfuse.c
function kfuse_wait_ready (line 21) | int kfuse_wait_ready()
function kfuse_read (line 33) | int kfuse_read(u32 *buf)
FILE: bdk/soc/pinmux.c
function pinmux_config_uart (line 22) | void pinmux_config_uart(u32 idx)
function pinmux_config_i2c (line 30) | void pinmux_config_i2c(u32 idx)
function pinmux_config_i2s (line 43) | void pinmux_config_i2s(u32 idx)
FILE: bdk/soc/pmc.c
function pmc_scratch_lock (line 22) | void pmc_scratch_lock(pmc_sec_lock_t lock_mask)
function pmc_domain_pwrgate_set (line 111) | int pmc_domain_pwrgate_set(pmc_power_rail_t part, u32 enable)
FILE: bdk/soc/pmc.h
type pmc_sec_lock_t (line 25) | typedef enum _pmc_sec_lock_t
type pmc_power_rail_t (line 42) | typedef enum _pmc_power_rail_t
FILE: bdk/soc/pmc_t210.h
type pmc_regs_t210_t (line 775) | typedef struct _pmc_regs_t210_t {
FILE: bdk/soc/timer.c
function u32 (line 30) | u32 get_tmr_s()
function u32 (line 36) | u32 get_tmr_ms()
function u32 (line 43) | u32 get_tmr_us()
function msleep (line 48) | void msleep(u32 ms)
function usleep (line 60) | void usleep(u32 us)
function isleep (line 77) | void __attribute__((target("arm"))) isleep(u32 is)
function timer_usleep (line 82) | void timer_usleep(u32 us)
function watchdog_start (line 91) | void watchdog_start(u32 us, u32 mode)
function watchdog_end (line 100) | void watchdog_end()
function watchdog_handle (line 110) | void watchdog_handle()
function watchdog_fired (line 119) | bool watchdog_fired()
FILE: bdk/soc/uart.c
function uart_init (line 26) | void uart_init(u32 idx, u32 baud, u32 mode)
function uart_wait_xfer (line 71) | void uart_wait_xfer(u32 idx, u32 which)
function uart_send (line 86) | void uart_send(u32 idx, const u8 *buf, u32 len)
function u32 (line 98) | u32 uart_recv(u32 idx, u8 *buf, u32 len)
function uart_invert (line 128) | void uart_invert(u32 idx, bool enable, u32 invert_mask)
function uart_set_mode (line 139) | void uart_set_mode(u32 idx, u32 mode)
function u32 (line 147) | u32 uart_get_IIR(u32 idx)
function uart_set_IIR (line 159) | void uart_set_IIR(u32 idx)
function uart_empty_fifo (line 169) | void uart_empty_fifo(u32 idx, u32 which)
function uart_printf (line 208) | void uart_printf(const char *fmt, ...)
FILE: bdk/soc/uart.h
type uart_t (line 75) | typedef struct _uart_t
type uart_mode_t (line 94) | typedef enum _uart_mode_t
FILE: bdk/storage/emmc.c
function emmc_error_count_increment (line 38) | void emmc_error_count_increment(u8 type)
function u16 (line 54) | u16 *emmc_get_error_count()
function u32 (line 59) | u32 emmc_get_mode()
function emmc_end (line 64) | void emmc_end() { sdmmc_storage_end(&emmc_storage); }
function emmc_init_retry (line 66) | int emmc_init_retry(bool power_cycle)
function emmc_initialize (line 103) | int emmc_initialize(bool power_cycle)
function emmc_set_partition (line 134) | int emmc_set_partition(u32 partition) { return sdmmc_storage_set_mmc_par...
function emmc_gpt_parse (line 136) | void emmc_gpt_parse(link_t *gpt)
function emmc_gpt_free (line 174) | void emmc_gpt_free(link_t *gpt)
function emmc_part_t (line 180) | emmc_part_t *emmc_part_find(link_t *gpt, const char *name)
function emmc_part_read (line 189) | int emmc_part_read(emmc_part_t *part, u32 sector_off, u32 num_sectors, v...
function emmc_part_write (line 202) | int emmc_part_write(emmc_part_t *part, u32 sector_off, u32 num_sectors, ...
function nx_emmc_get_autorcm_masks (line 215) | void nx_emmc_get_autorcm_masks(u8 *mod0, u8 *mod1)
FILE: bdk/storage/emmc.h
type emmc_part_t (line 47) | typedef struct _emmc_part_t
FILE: bdk/storage/mbr_gpt.h
type mbr_chs_t (line 23) | typedef struct _mbr_chs_t
type mbr_part_t (line 30) | typedef struct _mbr_part_t
type mbr_t (line 40) | typedef struct _mbr_t
type gpt_entry_t (line 49) | typedef struct _gpt_entry_t
type gpt_header_t (line 59) | typedef struct _gpt_header_t
type gpt_t (line 78) | typedef struct _gpt_t
FILE: bdk/storage/nx_emmc_bis.c
type cluster_cache_t (line 36) | typedef struct _cluster_cache_t
type bis_cache_t (line 43) | typedef struct _bis_cache_t
function nx_emmc_bis_write_block (line 60) | static int nx_emmc_bis_write_block(u32 sector, u32 count, void *buff, bo...
function _nx_emmc_bis_cluster_cache_init (line 115) | static void _nx_emmc_bis_cluster_cache_init(bool enable_cache)
function _nx_emmc_bis_flush_cache (line 129) | static void _nx_emmc_bis_flush_cache()
function nx_emmc_bis_read_block_normal (line 145) | static int nx_emmc_bis_read_block_normal(u32 sector, u32 count, void *buff)
function nx_emmc_bis_read_block_cached (line 188) | static int nx_emmc_bis_read_block_cached(u32 sector, u32 count, void *buff)
function nx_emmc_bis_read_block (line 236) | static int nx_emmc_bis_read_block(u32 sector, u32 count, void *buff)
function nx_emmc_bis_read (line 247) | int nx_emmc_bis_read(u32 sector, u32 count, void *buff)
function nx_emmc_bis_write (line 271) | int nx_emmc_bis_write(u32 sector, u32 count, void *buff)
function nx_emmc_bis_init (line 295) | void nx_emmc_bis_init(emmc_part_t *part, bool enable_cache, u32 emummc_o...
function nx_emmc_bis_end (line 321) | void nx_emmc_bis_end()
FILE: bdk/storage/nx_emmc_bis.h
type nx_emmc_cal0_spk_t (line 26) | typedef struct _nx_emmc_cal0_spk_t
type nx_emmc_cal0_t (line 68) | typedef struct _nx_emmc_cal0_t
FILE: bdk/storage/ramdisk.c
function ram_disk_init (line 31) | int ram_disk_init(void *ram_fs, u32 ramdisk_size)
function ram_disk_read (line 62) | int ram_disk_read(u32 sector, u32 sector_count, void *buf)
function ram_disk_write (line 75) | int ram_disk_write(u32 sector, u32 sector_count, const void *buf)
FILE: bdk/storage/sd.c
function sd_error_count_increment (line 42) | void sd_error_count_increment(u8 type)
function u16 (line 58) | u16 *sd_get_error_count()
function sd_get_card_removed (line 63) | bool sd_get_card_removed()
function sd_get_card_initialized (line 71) | bool sd_get_card_initialized()
function sd_get_card_mounted (line 76) | bool sd_get_card_mounted()
function u32 (line 81) | u32 sd_get_mode()
function sd_init_retry (line 86) | int sd_init_retry(bool power_cycle)
function sd_initialize (line 148) | int sd_initialize(bool power_cycle)
function sd_mount (line 180) | int sd_mount()
function _sd_deinit (line 218) | static void _sd_deinit(bool deinit)
function sd_unmount (line 241) | void sd_unmount() { _sd_deinit(false); }
function sd_end (line 242) | void sd_end() { _sd_deinit(true); }
function sd_is_gpt (line 244) | bool sd_is_gpt()
function sd_save_to_file (line 277) | int sd_save_to_file(const void *buf, u32 size, const char *filename)
FILE: bdk/storage/sdmmc.c
function u32 (line 47) | static inline u32 unstuff_bits(const u32 *resp, u32 start, u32 size)
function _sdmmc_storage_check_card_status (line 65) | static int _sdmmc_storage_check_card_status(u32 res)
function _sdmmc_storage_execute_cmd_type1_ex (line 82) | static int _sdmmc_storage_execute_cmd_type1_ex(sdmmc_storage_t *storage,...
function _sdmmc_storage_execute_cmd_type1 (line 100) | static int _sdmmc_storage_execute_cmd_type1(sdmmc_storage_t *storage, u3...
function _sdmmc_storage_go_idle_state (line 106) | static int _sdmmc_storage_go_idle_state(sdmmc_storage_t *storage)
function _sdmmc_storage_get_cid (line 114) | static int _sdmmc_storage_get_cid(sdmmc_storage_t *storage)
function _sdmmc_storage_select_card (line 126) | static int _sdmmc_storage_select_card(sdmmc_storage_t *storage)
function _sdmmc_storage_get_csd (line 131) | static int _sdmmc_storage_get_csd(sdmmc_storage_t *storage)
function _sdmmc_storage_set_blocklen (line 143) | static int _sdmmc_storage_set_blocklen(sdmmc_storage_t *storage, u32 blo...
function _sdmmc_storage_get_status (line 148) | static int _sdmmc_storage_get_status(sdmmc_storage_t *storage, u32 *resp...
function _sdmmc_storage_check_status (line 153) | static int _sdmmc_storage_check_status(sdmmc_storage_t *storage)
function sdmmc_storage_execute_vendor_cmd (line 159) | int sdmmc_storage_execute_vendor_cmd(sdmmc_storage_t *storage, u32 arg)
function sdmmc_storage_vendor_sandisk_report (line 186) | int sdmmc_storage_vendor_sandisk_report(sdmmc_storage_t *storage, void *...
function _sdmmc_storage_readwrite_ex (line 217) | static int _sdmmc_storage_readwrite_ex(sdmmc_storage_t *storage, u32 *bl...
function sdmmc_storage_end (line 251) | int sdmmc_storage_end(sdmmc_storage_t *storage)
function _sdmmc_storage_handle_io_error (line 265) | static int _sdmmc_storage_handle_io_error(sdmmc_storage_t *storage, bool...
function _sdmmc_storage_readwrite (line 302) | static int _sdmmc_storage_readwrite(sdmmc_storage_t *storage, u32 sector...
function sdmmc_storage_read (line 367) | int sdmmc_storage_read(sdmmc_storage_t *storage, u32 sector, u32 num_sec...
function sdmmc_storage_write (line 385) | int sdmmc_storage_write(sdmmc_storage_t *storage, u32 sector, u32 num_se...
function _mmc_storage_get_op_cond_inner (line 404) | static int _mmc_storage_get_op_cond_inner(sdmmc_storage_t *storage, u32 ...
function _mmc_storage_get_op_cond (line 430) | static int _mmc_storage_get_op_cond(sdmmc_storage_t *storage, u32 power)
function _mmc_storage_set_relative_addr (line 458) | static int _mmc_storage_set_relative_addr(sdmmc_storage_t *storage)
function _mmc_storage_parse_cid (line 463) | static void _mmc_storage_parse_cid(sdmmc_storage_t *storage)
function _mmc_storage_parse_csd (line 507) | static void _mmc_storage_parse_csd(sdmmc_storage_t *storage)
function _mmc_storage_parse_ext_csd (line 519) | static void _mmc_storage_parse_ext_csd(sdmmc_storage_t *storage)
function mmc_storage_get_ext_csd (line 549) | int mmc_storage_get_ext_csd(sdmmc_storage_t *storage)
function sd_storage_get_ext_reg (line 572) | int sd_storage_get_ext_reg(sdmmc_storage_t *storage, u8 fno, u8 page, u1...
function _mmc_storage_switch (line 600) | static int _mmc_storage_switch(sdmmc_storage_t *storage, u32 arg)
function _mmc_storage_switch_buswidth (line 605) | static int _mmc_storage_switch_buswidth(sdmmc_storage_t *storage, u32 bu...
function _mmc_storage_enable_HS (line 633) | static int _mmc_storage_enable_HS(sdmmc_storage_t *storage, bool check_s...
function _mmc_storage_enable_HS200 (line 653) | static int _mmc_storage_enable_HS200(sdmmc_storage_t *storage)
function _mmc_storage_enable_HS400 (line 670) | static int _mmc_storage_enable_HS400(sdmmc_storage_t *storage)
function _mmc_storage_enable_highspeed (line 695) | static int _mmc_storage_enable_highspeed(sdmmc_storage_t *storage, u32 c...
function sdmmc_storage_init_mmc (line 729) | int sdmmc_storage_init_mmc(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32...
function sdmmc_storage_set_mmc_partition (line 811) | int sdmmc_storage_set_mmc_partition(sdmmc_storage_t *storage, u32 partit...
function _sd_storage_execute_app_cmd (line 828) | static int _sd_storage_execute_app_cmd(sdmmc_storage_t *storage, u32 exp...
function _sd_storage_execute_app_cmd_type1 (line 837) | static int _sd_storage_execute_app_cmd_type1(sdmmc_storage_t *storage, u...
function _sd_storage_debug_print_cid (line 846) | void _sd_storage_debug_print_cid(const u32 *raw_cid)
function _sd_storage_debug_print_csd (line 862) | void _sd_storage_debug_print_csd(const u32 *raw_csd)
function _sd_storage_debug_print_scr (line 899) | void _sd_storage_debug_print_scr(const u32 *raw_scr)
function _sd_storage_debug_print_ssr (line 920) | void _sd_storage_debug_print_ssr(const u8 *raw_ssr)
function _sd_storage_send_if_cond (line 972) | static int _sd_storage_send_if_cond(sdmmc_storage_t *storage, bool *is_s...
function _sd_storage_get_op_cond_once (line 1000) | static int _sd_storage_get_op_cond_once(sdmmc_storage_t *storage, u32 *c...
function _sd_storage_get_op_cond (line 1020) | static int _sd_storage_get_op_cond(sdmmc_storage_t *storage, bool is_sds...
function _sd_storage_get_rca (line 1071) | static int _sd_storage_get_rca(sdmmc_storage_t *storage)
function _sd_storage_parse_scr (line 1101) | static void _sd_storage_parse_scr(sdmmc_storage_t *storage)
function sd_storage_get_scr (line 1128) | int sd_storage_get_scr(sdmmc_storage_t *storage)
function _sd_storage_switch_get (line 1161) | static int _sd_storage_switch_get(sdmmc_storage_t *storage, void *buf)
function _sd_storage_switch (line 1182) | static int _sd_storage_switch(sdmmc_storage_t *storage, void *buf, int m...
function _sd_storage_set_power_limit (line 1206) | static void _sd_storage_set_power_limit(sdmmc_storage_t *storage, u16 po...
function _sd_storage_set_driver_type (line 1244) | __attribute__ ((unused)) static int _sd_storage_set_driver_type(sdmmc_st...
function _sd_storage_enable_DDR200 (line 1305) | static int _sd_storage_enable_DDR200(sdmmc_storage_t *storage, u8 *buf)
function _sd_storage_set_card_bus_speed (line 1346) | static int _sd_storage_set_card_bus_speed(sdmmc_storage_t *storage, u32 ...
function sd_storage_get_fmodes (line 1376) | int sd_storage_get_fmodes(sdmmc_storage_t *storage, u8 *buf, sd_func_mod...
function _sd_storage_enable_uhs_low_volt (line 1392) | static int _sd_storage_enable_uhs_low_volt(sdmmc_storage_t *storage, u32...
function _sd_storage_enable_hs_high_volt (line 1500) | static int _sd_storage_enable_hs_high_volt(sdmmc_storage_t *storage)
function u32 (line 1523) | u32 sd_storage_get_ssr_au(sdmmc_storage_t *storage)
function _sd_storage_parse_ssr (line 1561) | static void _sd_storage_parse_ssr(sdmmc_storage_t *storage)
function sd_storage_parse_perf_enhance (line 1605) | int sd_storage_parse_perf_enhance(sdmmc_storage_t *storage, u8 fno, u8 p...
function _sd_storage_parse_ext_reg (line 1625) | static void _sd_storage_parse_ext_reg(sdmmc_storage_t *storage, u8 *buf,...
function sd_storage_get_ext_regs (line 1662) | void sd_storage_get_ext_regs(sdmmc_storage_t *storage, u8 *buf)
function sd_storage_get_ssr (line 1685) | int sd_storage_get_ssr(sdmmc_storage_t *storage)
function _sd_storage_parse_cid (line 1726) | static void _sd_storage_parse_cid(sdmmc_storage_t *storage)
function _sd_storage_parse_csd (line 1748) | static void _sd_storage_parse_csd(sdmmc_storage_t *storage)
function _sdmmc_storage_get_bus_uhs_support (line 1781) | static bool _sdmmc_storage_get_bus_uhs_support(u32 bus_width, u32 type)
function sdmmc_storage_init_wait_sd (line 1799) | void sdmmc_storage_init_wait_sd()
function sdmmc_storage_init_sd (line 1807) | int sdmmc_storage_init_sd(sdmmc_storage_t *storage, sdmmc_t *sdmmc, u32 ...
function _gc_storage_custom_cmd (line 1934) | int _gc_storage_custom_cmd(sdmmc_storage_t *storage, void *buf)
function sdmmc_storage_init_gc (line 1961) | int sdmmc_storage_init_gc(sdmmc_storage_t *storage, sdmmc_t *sdmmc)
FILE: bdk/storage/sdmmc.h
type sdmmc_type (line 32) | typedef enum _sdmmc_type
type mmc_sandisk_advanced_report_t (line 43) | typedef struct _mmc_sandisk_advanced_report_t
type mmc_sandisk_report_t (line 82) | typedef struct _mmc_sandisk_report_t
type mmc_cid_t (line 118) | typedef struct _mmc_cid
type mmc_csd_t (line 131) | typedef struct _mmc_csd
type mmc_ext_csd_t (line 144) | typedef struct _mmc_ext_csd
type sd_scr_t (line 161) | typedef struct _sd_scr
type sd_ssr_t (line 169) | typedef struct _sd_ssr
type sd_ext_reg_t (line 182) | typedef struct _sd_ext_reg_t
type sdmmc_storage_t (line 192) | typedef struct _sdmmc_storage_t
type sd_func_modes_t (line 216) | typedef struct _sd_func_modes_t
FILE: bdk/storage/sdmmc_driver.c
function sdmmc_get_io_power (line 44) | int sdmmc_get_io_power(sdmmc_t *sdmmc)
function _sdmmc_set_io_power (line 56) | static int _sdmmc_set_io_power(sdmmc_t *sdmmc, u32 power)
function u32 (line 82) | u32 sdmmc_get_bus_width(sdmmc_t *sdmmc)
function sdmmc_set_bus_width (line 92) | void sdmmc_set_bus_width(sdmmc_t *sdmmc, u32 bus_width)
function sdmmc_save_tap_value (line 104) | void sdmmc_save_tap_value(sdmmc_t *sdmmc)
function _sdmmc_config_tap_val (line 110) | static int _sdmmc_config_tap_val(sdmmc_t *sdmmc, u32 type)
function _sdmmc_commit_changes (line 138) | static void _sdmmc_commit_changes(sdmmc_t *sdmmc)
function _sdmmc_pad_config_fallback (line 143) | static void _sdmmc_pad_config_fallback(sdmmc_t *sdmmc, u32 power)
function _sdmmc_autocal_execute (line 178) | static void _sdmmc_autocal_execute(sdmmc_t *sdmmc, u32 power)
function _sdmmc_dll_cal_execute (line 238) | static int _sdmmc_dll_cal_execute(sdmmc_t *sdmmc)
function _sdmmc_reset_cmd_data (line 282) | static void _sdmmc_reset_cmd_data(sdmmc_t *sdmmc)
function _sdmmc_reset_all (line 291) | static void _sdmmc_reset_all(sdmmc_t *sdmmc)
function sdmmc_setup_drv_type (line 300) | void sdmmc_setup_drv_type(sdmmc_t *sdmmc, u32 type)
function sdmmc_setup_clock (line 307) | int sdmmc_setup_clock(sdmmc_t *sdmmc, u32 type)
function _sdmmc_card_clock_enable (line 397) | static void _sdmmc_card_clock_enable(sdmmc_t *sdmmc)
function _sdmmc_card_clock_disable
Condensed preview — 424 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (6,055K chars).
[
{
"path": ".gitignore",
"chars": 141,
"preview": ".vs\n.vscode\nbuild/*\noutput/*\nloader/payload_00.h\nloader/payload_01.h\ntools/bin2c/bin2c\ntools/bin2c/bin2c.exe\ntools/lz/lz"
},
{
"path": "LICENSE",
"chars": 18092,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 2, June 1991\n\n Copyright (C) 1989, 1991 Fr"
},
{
"path": "Makefile",
"chars": 6234,
"preview": "ifeq ($(strip $(DEVKITARM)),)\n$(error \"Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM\")\ne"
},
{
"path": "README.md",
"chars": 17138,
"preview": "# hekate - Nyx\n\n 2022 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/display/di.c",
"chars": 32792,
"preview": "/*\n * Copyright (c) 2018 naehrwert\n * Copyright (c) 2018-2025 CTCaer\n *\n * This program is free software; you can redist"
},
{
"path": "bdk/display/di.h",
"chars": 35137,
"preview": "/*\n * Copyright (c) 2018 naehrwert\n * Copyright (c) 2018-2025 CTCaer\n *\n * This program is free software; you can redist"
},
{
"path": "bdk/display/di.inl",
"chars": 22759,
"preview": "/*\n* Copyright (c) 2018 naehrwert\n* Copyright (c) 2018-2025 CTCaer\n*\n* This program is free software; you can redistribu"
},
{
"path": "bdk/display/vic.c",
"chars": 19411,
"preview": "/*\n * VIC (4.0) driver for Tegra X1\n *\n * Copyright (c) 2018-2024 CTCaer\n *\n * This program is free software; you can re"
},
{
"path": "bdk/display/vic.h",
"chars": 1746,
"preview": "/*\n * VIC driver for Tegra X1\n *\n * Copyright (c) 2018-2019 CTCaer\n *\n * This program is free software; you can redistri"
},
{
"path": "bdk/exception_handlers.S",
"chars": 7201,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/fatfs_cfg.h",
"chars": 898,
"preview": "/*\n * Copyright (c) 2020 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/fatfs_conf.h",
"chars": 11964,
"preview": "/*---------------------------------------------------------------------------/\n/ FatFs Functional Configurations\n/-----"
},
{
"path": "bdk/gfx_utils.h",
"chars": 725,
"preview": "/*\n * Copyright (c) 2020 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/ianos/elfload/elf.h",
"chars": 22669,
"preview": "/* $OpenBSD: exec_elf.h,v 1.53 2014/01/03 03:00:39 guenther Exp $ */\n/*\n * Copyright (c) 1995, 1996 Erik Theisen. "
},
{
"path": "bdk/ianos/elfload/elfarch.h",
"chars": 1385,
"preview": "/*\n * Copyright © 2014, Owen Shepherd\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * "
},
{
"path": "bdk/ianos/elfload/elfload.c",
"chars": 6668,
"preview": "/*\n * Copyright © 2018, M4xw\n * Copyright © 2014, Owen Shepherd\n *\n * Permission to use, copy, modify, and/or distribute"
},
{
"path": "bdk/ianos/elfload/elfload.h",
"chars": 2997,
"preview": "/*\n * Copyright © 2018, M4xw\n * Copyright © 2014, Owen Shepherd\n *\n * Permission to use, copy, modify, and/or distribute"
},
{
"path": "bdk/ianos/elfload/elfreloc_aarch64.c",
"chars": 2030,
"preview": "/*\n * Copyright © 2014, Owen Shepherd\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * "
},
{
"path": "bdk/ianos/elfload/elfreloc_arm.c",
"chars": 1887,
"preview": "/*\n * ----------------------------------------------------------------------------\n * \"THE BEER-WARE LICENSE\" (Revision "
},
{
"path": "bdk/ianos/ianos.c",
"chars": 3416,
"preview": "/*\n * Copyright (c) 2018 M4xw\n * Copyright (c) 2018-2026 CTCaer\n *\n * This program is free software; you can redistribut"
},
{
"path": "bdk/ianos/ianos.h",
"chars": 1281,
"preview": "/*\n * Copyright (c) 2018 M4xw\n * Copyright (c) 2018-2026 CTCaer\n *\n * This program is free software; you can redistribut"
},
{
"path": "bdk/input/als.c",
"chars": 4318,
"preview": "/*\n * Ambient light sensor driver for Nintendo Switch's Rohm BH1730\n *\n * Copyright (c) 2018 CTCaer\n *\n * This program i"
},
{
"path": "bdk/input/als.h",
"chars": 1913,
"preview": "/*\n * Ambient light sensor driver for Nintendo Switch's Rohm BH1730\n *\n * Copyright (c) 2018 CTCaer\n *\n * This program i"
},
{
"path": "bdk/input/joycon.c",
"chars": 37056,
"preview": "/*\n * Joy-Con UART driver for Nintendo Switch\n *\n * Copyright (c) 2019-2026 CTCaer\n *\n * This program is free software; "
},
{
"path": "bdk/input/joycon.h",
"chars": 2358,
"preview": "/*\n * Ambient light sensor driver for Nintendo Switch's Rohm BH1730\n *\n * Copyright (c) 2018-2025 CTCaer\n *\n * This prog"
},
{
"path": "bdk/input/touch.c",
"chars": 10929,
"preview": "/*\n * Touch driver for Nintendo Switch's STM FingerTip S (FTM4CD60DA1BE/FTM4CD50TA1BE) touch controller\n *\n * Copyright "
},
{
"path": "bdk/input/touch.h",
"chars": 5615,
"preview": "/*\n * Touch driver for Nintendo Switch's STM FingerTip S (4CD60D) touch controller\n *\n * Copyright (c) 2018 langerhans\n "
},
{
"path": "bdk/libs/compr/blz.c",
"chars": 3031,
"preview": "/*\n * Copyright (c) 2018 rajkosto\n * Copyright (c) 2018 SciresM\n *\n * This program is free software; you can redistribut"
},
{
"path": "bdk/libs/compr/blz.h",
"chars": 1232,
"preview": "/*\n * Copyright (c) 2018 rajkosto\n *\n * This program is free software; you can redistribute it and/or modify it\n * under"
},
{
"path": "bdk/libs/compr/lz.c",
"chars": 6682,
"preview": "/*************************************************************************\n* Name: lz.c\n* Author: Marcus Gee"
},
{
"path": "bdk/libs/compr/lz.h",
"chars": 1701,
"preview": "/*************************************************************************\n* Name: lz.h\n* Author: Marcus Gee"
},
{
"path": "bdk/libs/compr/lz4.c",
"chars": 68940,
"preview": "/*\n LZ4 - Fast LZ compression algorithm\n Copyright (C) 2011-2017, Yann Collet.\n\n BSD 2-Clause License (http://www."
},
{
"path": "bdk/libs/compr/lz4.h",
"chars": 28269,
"preview": "/*\n * LZ4 - Fast LZ compression algorithm\n * Header File\n * Copyright (C) 2011-2017, Yann Collet.\n\n BSD 2-Clause Li"
},
{
"path": "bdk/libs/fatfs/diskio.h",
"chars": 2128,
"preview": "/*-----------------------------------------------------------------------/\n/ Low level disk interface modlue include fi"
},
{
"path": "bdk/libs/fatfs/ff.c",
"chars": 238949,
"preview": "/*\n * Copyright (c) 2018 naehrwert\n * Copyright (c) 2018-2025 CTCaer\n *\n * This program is free software; you can redist"
},
{
"path": "bdk/libs/fatfs/ff.h",
"chars": 15036,
"preview": "/*----------------------------------------------------------------------------/\n/ FatFs - Generic FAT Filesystem module"
},
{
"path": "bdk/libs/fatfs/ffsystem.c",
"chars": 1946,
"preview": "/*------------------------------------------------------------------------*/\n/* Sample Code of OS Dependent Functions fo"
},
{
"path": "bdk/libs/fatfs/ffunicode.c",
"chars": 32188,
"preview": "/*------------------------------------------------------------------------*/\n/* Unicode handling functions for FatFs R0."
},
{
"path": "bdk/libs/lv_conf.h",
"chars": 14739,
"preview": "/*\n * Copyright (c) 2018 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/docs/CODE_OF_CONDUCT.md",
"chars": 3245,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "bdk/libs/lvgl/docs/CONTRIBUTING.md",
"chars": 6350,
"preview": "# Contributing to Littlev Graphics Library\n\n**Welcome! It's glad to see that you are interested in contributing to Litt"
},
{
"path": "bdk/libs/lvgl/docs/astyle_c",
"chars": 169,
"preview": "--style=kr --convert-tabs --indent=spaces=4 --indent-switches --pad-oper --unpad-paren --align-pointer=middle --suffi"
},
{
"path": "bdk/libs/lvgl/docs/astyle_h",
"chars": 33,
"preview": "--convert-tabs --indent=spaces=4\n"
},
{
"path": "bdk/libs/lvgl/licence.txt",
"chars": 1073,
"preview": "MIT licence\nCopyright (c) 2016 Gábor Kiss-Vámosi\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "bdk/libs/lvgl/lv_core/lv_core.mk",
"chars": 257,
"preview": "CSRCS += lv_group.c\nCSRCS += lv_indev.c\nCSRCS += lv_obj.c\nCSRCS += lv_refr.c\nCSRCS += lv_style.c\nCSRCS += lv_vdb.c\nCSRCS"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_group.c",
"chars": 16103,
"preview": "/**\n * @file lv_group.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_group.h\"\n#i"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_group.h",
"chars": 7929,
"preview": "/**\n * @file lv_group.h\n *\n */\n\n#ifndef LV_GROUP_H\n#define LV_GROUP_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/********"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_indev.c",
"chars": 33790,
"preview": "/**\n * @file lv_indev_proc.c\n *\n */\n\n/*********************\n * INCLUDES\n ********************/\n#include \"lv_indev.h"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_indev.h",
"chars": 4321,
"preview": "/**\n * @file lv_indev_proc.h\n *\n */\n\n#ifndef LV_INDEV_H\n#define LV_INDEV_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/***"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_lang.c",
"chars": 2425,
"preview": "/**\n * @file lv_lang.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_lang.h\"\n#if "
},
{
"path": "bdk/libs/lvgl/lv_core/lv_lang.h",
"chars": 1470,
"preview": "/**\n * @file lv_lang.h\n *\n */\n\n#ifndef LV_LANG_H\n#define LV_LANG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/***********"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_obj.c",
"chars": 54140,
"preview": "/**\n * @file lv_base_obj.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_obj.h\"\n#"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_obj.h",
"chars": 23929,
"preview": "/**\n * @file lv_obj.h\n *\n */\n\n#ifndef LV_OBJ_H\n#define LV_OBJ_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**************"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_refr.c",
"chars": 18525,
"preview": "/**\n * @file lv_refr.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include <stddef.h>\n#incl"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_refr.h",
"chars": 2139,
"preview": "/**\n * @file lv_refr.h\n *\n */\n\n#ifndef LV_REFR_H\n#define LV_REFR_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/***********"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_style.c",
"chars": 13722,
"preview": "/*\n * Copyright (c) 2018 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_style.h",
"chars": 5009,
"preview": "/**\n * @file lv_style.h\n *\n */\n\n#ifndef LV_STYLE_H\n#define LV_STYLE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/********"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_vdb.c",
"chars": 5045,
"preview": "/**\n * @file lv_vdb.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_vdb.h\"\n#if LV"
},
{
"path": "bdk/libs/lvgl/lv_core/lv_vdb.h",
"chars": 3128,
"preview": "/**\n * @file lv_vdb.h\n *\n */\n\n#ifndef LV_VDB_H\n#define LV_VDB_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**************"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw.c",
"chars": 5877,
"preview": "/**\n * @file lv_draw.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n\n#include <stdio.h>\n#incl"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw.h",
"chars": 3303,
"preview": "/**\n * @file lv_draw.h\n *\n */\n\n#ifndef LV_DRAW_H\n#define LV_DRAW_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/***********"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw.mk",
"chars": 341,
"preview": "CSRCS += lv_draw_vbasic.c\nCSRCS += lv_draw_rbasic.c\nCSRCS += lv_draw.c\nCSRCS += lv_draw_rect.c\nCSRCS += lv_draw_label.c\n"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_arc.c",
"chars": 9410,
"preview": "/**\n * @file lv_draw_arc.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_draw_arc"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_arc.h",
"chars": 1318,
"preview": "/**\n * @file lv_draw_arc.h\n *\n */\n\n#ifndef LV_DRAW_ARC_H\n#define LV_DRAW_ARC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_img.c",
"chars": 26109,
"preview": "/**\n * @file lv_draw_img.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_draw_img"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_img.h",
"chars": 6209,
"preview": "/**\n * @file lv_draw_img.h\n *\n */\n\n#ifndef LV_DRAW_IMG_H\n#define LV_DRAW_IMG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_label.c",
"chars": 8202,
"preview": "/**\n * @file lv_draw_label.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_draw_l"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_label.h",
"chars": 1135,
"preview": "/**\n * @file lv_draw_label.h\n *\n */\n\n#ifndef LV_DRAW_LABEL_H\n#define LV_DRAW_LABEL_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#e"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_line.c",
"chars": 21994,
"preview": "/**\n * @file lv_draw_line.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include <stdio.h>\n#"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_line.h",
"chars": 953,
"preview": "/**\n * @file lv_draw_line.h\n *\n */\n\n#ifndef LV_DRAW_LINE_H\n#define LV_DRAW_LINE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endi"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_rbasic.c",
"chars": 9238,
"preview": "/**\n * @file lv_draw_rbasic.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_draw_"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_rbasic.h",
"chars": 2717,
"preview": "/**\n * @file lv_draw_rbasic..h\n *\n */\n\n#ifndef LV_DRAW_RBASIC_H\n#define LV_DRAW_RBASIC_H\n\n#ifdef __cplusplus\nextern \"C\" "
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_rect.c",
"chars": 56274,
"preview": "/**\n * @file lv_draw_rect.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_draw_re"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_rect.h",
"chars": 898,
"preview": "/**\n * @file lv_draw_rect.h\n *\n */\n\n#ifndef LV_DRAW_RECT_H\n#define LV_DRAW_RECT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endi"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_triangle.c",
"chars": 4600,
"preview": "/**\n * @file lv_draw_triangle.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_dra"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_triangle.h",
"chars": 913,
"preview": "/**\n * @file lv_draw_triangle.h\n *\n */\n\n#ifndef LV_DRAW_TRIANGLE_H\n#define LV_DRAW_TRIANGLE_H\n\n#ifdef __cplusplus\nextern"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_vbasic.c",
"chars": 25130,
"preview": "/**\n * @file lv_vdraw.c\n *\n */\n\n#include \"lv_draw_vbasic.h\"\n\n#include <stdint.h>\n#include <string.h>\n\n#include \"../lv_ha"
},
{
"path": "bdk/libs/lvgl/lv_draw/lv_draw_vbasic.h",
"chars": 2403,
"preview": "/**\n * @file lv_draw_vbasic.h\n *\n */\n\n#ifndef LV_DRAW_VBASIC_H\n#define LV_DRAW_VBASIC_H\n\n#ifdef __cplusplus\nextern \"C\" {"
},
{
"path": "bdk/libs/lvgl/lv_fonts/hekate_symbol_120.c",
"chars": 2361,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_fonts/hekate_symbol_20.c",
"chars": 8395,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_fonts/hekate_symbol_30.c",
"chars": 8445,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_fonts/interui_20.c",
"chars": 13645,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_fonts/interui_30.c",
"chars": 13783,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_fonts/lv_font_builtin.c",
"chars": 2124,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_fonts/lv_font_builtin.h",
"chars": 1840,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_fonts/lv_fonts.mk",
"chars": 353,
"preview": "CSRCS += lv_font_builtin.c\nCSRCS += hekate_symbol_10.c\nCSRCS += hekate_symbol_20.c\nCSRCS += hekate_symbol_30.c\nCSRCS += "
},
{
"path": "bdk/libs/lvgl/lv_fonts/ubuntu_mono.c",
"chars": 13566,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal.h",
"chars": 557,
"preview": "/**\n * @file hal.h\n *\n */\n\n#ifndef HAL_H\n#define HAL_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*********************\n "
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal.mk",
"chars": 190,
"preview": "CSRCS += lv_hal_disp.c\nCSRCS += lv_hal_indev.c\nCSRCS += lv_hal_tick.c\n\nDEPPATH += --dep-path $(LVGL_DIR)/lvgl/lv_hal\nVPA"
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal_disp.c",
"chars": 6620,
"preview": "\n/**\n * @file hal_disp.c\n *\n * @description HAL layer for display driver\n *\n */\n\n/*********************\n * INCLUDES"
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal_disp.h",
"chars": 5561,
"preview": "/**\n * @file hal_disp.h\n *\n * @description Display Driver HAL interface header file\n *\n */\n\n#ifndef HAL_DISP_H\n#define H"
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal_indev.c",
"chars": 3182,
"preview": "/**\n * @file hal_indev.c\n *\n * @description Input device HAL interface\n *\n */\n\n/*********************\n * INCLUDES\n "
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal_indev.h",
"chars": 5168,
"preview": "/**\n * @file hal_indev.h\n *\n * @description Input Device HAL interface layer header file\n *\n */\n\n#ifndef HAL_INDEV_H\n#de"
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal_tick.c",
"chars": 2147,
"preview": "/**\n * @file systick.c\n * Provide access to the system tick with 1 millisecond resolution\n */\n\n/*********************\n *"
},
{
"path": "bdk/libs/lvgl/lv_hal/lv_hal_tick.h",
"chars": 1317,
"preview": "/**\n * @file lv_hal_tick.h\n * Provide access to the system tick with 1 millisecond resolution\n */\n\n#ifndef LV_HAL_TICK_H"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_anim.c",
"chars": 12259,
"preview": "/**\n * @file anim.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_anim.h\"\n\n#if US"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_anim.h",
"chars": 4809,
"preview": "/**\n * @file anim.h\n *\n */\n\n#ifndef ANIM_H\n#define ANIM_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/*******************"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_area.c",
"chars": 4999,
"preview": "/**\n * @file lv_area.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_area.h\"\n#inc"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_area.h",
"chars": 4140,
"preview": "/**\n * @file lv_area.h\n *\n */\n\n#ifndef LV_AREA_H\n#define LV_AREA_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/**********"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_circ.c",
"chars": 1722,
"preview": "/**\n * @file lv_circ.c\n * Circle drawing algorithm (with Bresenham)\n * Only a 1/8 circle is calculated. Use CIRC_OCT1_X,"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_circ.h",
"chars": 1734,
"preview": "/**\n * @file lv_circ.h\n *\n */\n\n#ifndef LV_CIRC_H\n#define LV_CIRC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/**********"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_color.c",
"chars": 3678,
"preview": "/*\n * Copyright (c) 2019-2020 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * un"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_color.h",
"chars": 13286,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_font.c",
"chars": 7025,
"preview": "/**\n * @file lv_font.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include <stddef.h>\n#incl"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_font.h",
"chars": 5458,
"preview": "/**\n * @file lv_font.h\n *\n */\n\n#ifndef LV_FONT_H\n#define LV_FONT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/**********"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_fs.c",
"chars": 15455,
"preview": "/**\n * @file lv_fs.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_fs.h\"\n#if USE_"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_fs.h",
"chars": 8377,
"preview": "/**\n * @file lv_fs.h\n *\n */\n\n#ifndef LV_FS_H\n#define LV_FS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_gc.c",
"chars": 680,
"preview": "/**\n * @file lv_gc.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n\n#include \"lv_gc.h\"\n\n/*****"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_gc.h",
"chars": 1447,
"preview": "/**\n * @file lv_gc.h\n *\n */\n\n#ifndef LV_GC_H\n#define LV_GC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_ll.c",
"chars": 10210,
"preview": "/**\n * @file lv_ll.c\n * Handle linked lists.\n * The nodes are dynamically allocated by the 'lv_mem' module,\n */\n\n/******"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_ll.h",
"chars": 3581,
"preview": "/**\n * @file lv_ll.c\n * Handle linked lists. The nodes are dynamically allocated by the 'lv_mem' module.\n */\n\n#ifndef LV"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_log.c",
"chars": 2068,
"preview": "/**\n * @file lv_log.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_log.h\"\n#if US"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_log.h",
"chars": 2319,
"preview": "/**\n * @file lv_log.h\n *\n */\n\n#ifndef LV_LOG_H\n#define LV_LOG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**************"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_math.c",
"chars": 4533,
"preview": "/**\n * @file lv_math.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_math.h\"\n#inc"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_math.h",
"chars": 1926,
"preview": "/**\n * @file math_base.h\n *\n */\n\n#ifndef LV_MATH_H\n#define LV_MATH_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/********"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_mem.c",
"chars": 12521,
"preview": "/*\n * Copyright (c) 2019-2020 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * un"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_mem.h",
"chars": 2496,
"preview": "/**\n * @file lv_mem.h\n *\n */\n\n#ifndef LV_MEM_H\n#define LV_MEM_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/*************"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_misc.mk",
"chars": 380,
"preview": "CSRCS += lv_font.c\nCSRCS += lv_circ.c\nCSRCS += lv_area.c\nCSRCS += lv_task.c\nCSRCS += lv_fs.c\nCSRCS += lv_anim.c\nCSRCS +="
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_symbol_def.h",
"chars": 9202,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_task.c",
"chars": 9819,
"preview": "/**\n * @file lv_task.c\n * An 'lv_task' is a void (*fp) (void* param) type function which will be called periodically.\n "
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_task.h",
"chars": 3113,
"preview": "/**\n * @file lv_task.c\n * An 'lv_task' is a void (*fp) (void* param) type function which will be called periodically.\n "
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_templ.c",
"chars": 579,
"preview": "/**\n * @file lv_templ.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n\n/*********************\n"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_templ.h",
"chars": 512,
"preview": "/**\n * @file lv_templ.h\n *\n */\n\n#ifndef LV_TEMPL_H\n#define LV_TEMPL_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/********"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_txt.c",
"chars": 27566,
"preview": "/**\n * @file lv_text.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_txt.h\"\n#incl"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_txt.h",
"chars": 6765,
"preview": "/**\n * @file lv_text.h\n *\n */\n\n#ifndef LV_TXT_H\n#define LV_TXT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*************"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_ufs.c",
"chars": 13841,
"preview": "/**\n * @file lv_ufs.c\n * Implementation of RAM file system which do NOT support directories.\n * The API is compatible wi"
},
{
"path": "bdk/libs/lvgl/lv_misc/lv_ufs.h",
"chars": 6438,
"preview": "/**\n * @file lv_ufs.h\n * Implementation of RAM file system which do NOT support directories.\n * The API is compatible wi"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_arc.c",
"chars": 8694,
"preview": "/**\n * @file lv_arc.c\n *\n */\n\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_arc.h\"\n#if U"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_arc.h",
"chars": 2531,
"preview": "/**\n * @file lv_arc.h\n *\n */\n\n\n#ifndef LV_ARC_H\n#define LV_ARC_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_bar.c",
"chars": 13028,
"preview": "\n\n/**\n * @file lv_bar.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_bar.h\"\n#if "
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_bar.h",
"chars": 3766,
"preview": "/**\n * @file lv_bar.h\n *\n */\n\n#ifndef LV_BAR_H\n#define LV_BAR_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_btn.c",
"chars": 25618,
"preview": "/**\n * @file lv_btn.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n\n#include \"lv_btn.h\"\n#if U"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_btn.h",
"chars": 7423,
"preview": "/**\n * @file lv_btn.h\n *\n */\n\n#ifndef LV_BTN_H\n#define LV_BTN_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_btnm.c",
"chars": 31555,
"preview": "/**\n * @file lv_btnm.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_btnm.h\"\n#if "
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_btnm.h",
"chars": 6038,
"preview": "/**\n * @file lv_btnm.h\n *\n */\n\n\n#ifndef LV_BTNM_H\n#define LV_BTNM_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_calendar.c",
"chars": 38762,
"preview": "/**\n * @file lv_calendar.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_calendar"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_calendar.h",
"chars": 7599,
"preview": "/**\n * @file lv_calendar.h\n *\n */\n\n#ifndef LV_CALENDAR_H\n#define LV_CALENDAR_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_canvas.c",
"chars": 18967,
"preview": "/**\n * @file lv_canvas.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_canvas.h\"\n"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_canvas.h",
"chars": 7066,
"preview": "/**\n * @file lv_canvas.h\n *\n */\n\n#ifndef LV_CANVAS_H\n#define LV_CANVAS_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_cb.c",
"chars": 11494,
"preview": "/**\n * @file lv_cb.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_cb.h\"\n#if USE_"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_cb.h",
"chars": 3909,
"preview": "/**\n * @file lv_cb.h\n *\n */\n\n#ifndef LV_CB_H\n#define LV_CB_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_chart.c",
"chars": 25352,
"preview": "/**\n * @file lv_chart.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_chart.h\"\n#i"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_chart.h",
"chars": 7397,
"preview": "/**\n * @file lv_chart.h\n *\n */\n\n#ifndef LV_CHART_H\n#define LV_CHART_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_cont.c",
"chars": 21248,
"preview": "/**\n * @file lv_cont.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n\n#include \"lv_cont.h\"\n#if"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_cont.h",
"chars": 4171,
"preview": "/**\n * @file lv_cont.h\n *\n */\n\n#ifndef LV_CONT_H\n#define LV_CONT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/***********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_ddlist.c",
"chars": 32624,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_ddlist.h",
"chars": 8484,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_gauge.c",
"chars": 15745,
"preview": "/**\n * @file lv_gauge.c\n *\n */\n\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_gauge.h\"\n#"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_gauge.h",
"chars": 5569,
"preview": "/**\n * @file lv_gauge.h\n *\n */\n\n#ifndef LV_GAUGE_H\n#define LV_GAUGE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_img.c",
"chars": 12451,
"preview": "/**\n * @file lv_img.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_img.h\"\n#if US"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_img.h",
"chars": 4732,
"preview": "/**\n * @file lv_img.h\n *\n */\n\n#ifndef LV_IMG_H\n#define LV_IMG_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_imgbtn.c",
"chars": 12155,
"preview": "/**\n * @file lv_imgbtn.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_imgbtn.h\"\n"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_imgbtn.h",
"chars": 7226,
"preview": "/**\n * @file lv_imgbtn.h\n *\n */\n\n#ifndef LV_IMGBTN_H\n#define LV_IMGBTN_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_kb.c",
"chars": 15458,
"preview": "/*\n * Copyright (c) 2019-2020 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * un"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_kb.h",
"chars": 5726,
"preview": "/*\n * Copyright (c) 2019-2020 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * un"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_label.c",
"chars": 33352,
"preview": "/**\n * @file lv_rect.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_label.h\"\n#if"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_label.h",
"chars": 9462,
"preview": "/**\n * @file lv_rect.h\n *\n */\n\n#ifndef LV_LABEL_H\n#define LV_LABEL_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_led.c",
"chars": 7237,
"preview": "/**\n * @file lv_led.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_led.h\"\n#if US"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_led.h",
"chars": 2279,
"preview": "/**\n * @file lv_led.h\n *\n */\n\n#ifndef LV_LED_H\n#define LV_LED_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_line.c",
"chars": 10237,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_line.h",
"chars": 3964,
"preview": "/**\n * @file lv_line.h\n *\n */\n\n#ifndef LV_LINE_H\n#define LV_LINE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/***********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_list.c",
"chars": 34845,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_list.h",
"chars": 9445,
"preview": "/**\n * @file lv_list.h\n *\n */\n\n#ifndef LV_LIST_H\n#define LV_LIST_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/***********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_lmeter.c",
"chars": 11764,
"preview": "/**\n * @file lv_lmeter.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_lmeter.h\"\n"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_lmeter.h",
"chars": 3646,
"preview": "/**\n * @file lv_lmeter.h\n *\n */\n\n#ifndef LV_LMETER_H\n#define LV_LMETER_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_mbox.c",
"chars": 15799,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_mbox.h",
"chars": 6086,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_objx.mk",
"chars": 731,
"preview": "CSRCS += lv_arc.c\nCSRCS += lv_bar.c\nCSRCS += lv_cb.c\nCSRCS += lv_ddlist.c\nCSRCS += lv_kb.c\nCSRCS += lv_line.c\nCSRCS += l"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_objx_templ.c",
"chars": 6226,
"preview": "/**\n * @file lv_templ.c\n *\n */\n\n/* TODO Remove these instructions\n * Search an replace: template -> object normal name w"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_objx_templ.h",
"chars": 2333,
"preview": "/**\n * @file lv_templ.h\n *\n */\n\n\n/* TODO Remove these instructions\n * Search an replace: template -> object normal name "
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_page.c",
"chars": 44812,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_page.h",
"chars": 12852,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_preload.c",
"chars": 11638,
"preview": "/**\n * @file lv_preload.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_preload.h"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_preload.h",
"chars": 4055,
"preview": "/**\n * @file lv_preload.h\n *\n */\n\n#ifndef LV_PRELOAD_H\n#define LV_PRELOAD_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_roller.c",
"chars": 21750,
"preview": "/**\n * @file lv_roller.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_roller.h\"\n"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_roller.h",
"chars": 5803,
"preview": "/**\n * @file lv_roller.h\n *\n */\n\n#ifndef LV_ROLLER_H\n#define LV_ROLLER_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_slider.c",
"chars": 19275,
"preview": "/*\n * Copyright (c) 2026 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_slider.h",
"chars": 5028,
"preview": "/**\n * @file lv_slider.h\n *\n */\n\n#ifndef LV_SLIDER_H\n#define LV_SLIDER_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_spinbox.c",
"chars": 13358,
"preview": "/**\n * @file lv_spinbox.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_spinbox.h"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_spinbox.h",
"chars": 5010,
"preview": "/**\n * @file lv_spinbox.h\n *\n */\n\n\n#ifndef LV_SPINBOX_H\n#define LV_SPINBOX_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_sw.c",
"chars": 12786,
"preview": "/**\n * @file lv_sw.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_sw.h\"\n\n#if USE"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_sw.h",
"chars": 4444,
"preview": "/**\n * @file lv_sw.h\n *\n */\n\n#ifndef LV_SW_H\n#define LV_SW_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_ta.c",
"chars": 45521,
"preview": "/**\n * @file lv_ta.c\n *\n */\n\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_ta.h\"\n#if USE"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_ta.h",
"chars": 10613,
"preview": "/**\n * @file lv_ta.h\n *\n */\n\n#ifndef LV_TA_H\n#define LV_TA_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/*****************"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_table.c",
"chars": 28707,
"preview": "/**\n * @file lv_table.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_table.h\"\n#i"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_table.h",
"chars": 7259,
"preview": "/**\n * @file lv_table.h\n *\n */\n\n#ifndef LV_TABLE_H\n#define LV_TABLE_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/********"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_tabview.c",
"chars": 31276,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_tabview.h",
"chars": 6779,
"preview": "/**\n * @file lv_tabview.h\n *\n */\n\n#ifndef LV_TABVIEW_H\n#define LV_TABVIEW_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_tileview.c",
"chars": 19337,
"preview": "/**\n * @file lv_tileview.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_tileview"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_tileview.h",
"chars": 4059,
"preview": "/**\n * @file lv_tileview.h\n *\n */\n\n\n#ifndef LV_TILEVIEW_H\n#define LV_TILEVIEW_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_win.c",
"chars": 18583,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_objx/lv_win.h",
"chars": 8396,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_themes/lv_theme.c",
"chars": 3249,
"preview": "/**\n * @file lv_theme.c\n *\n */\n\n/*********************\n * INCLUDES\n *********************/\n#include \"lv_theme.h\"\n#i"
},
{
"path": "bdk/libs/lvgl/lv_themes/lv_theme.h",
"chars": 6301,
"preview": "/*\n * Copyright (c) 2019 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * under t"
},
{
"path": "bdk/libs/lvgl/lv_themes/lv_theme_hekate.c",
"chars": 23831,
"preview": "/*\n * Copyright (c) 2018-2026 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * un"
},
{
"path": "bdk/libs/lvgl/lv_themes/lv_theme_hekate.h",
"chars": 2241,
"preview": "/*\n * Copyright (c) 2018-2026 CTCaer\n *\n * This program is free software; you can redistribute it and/or modify it\n * un"
},
{
"path": "bdk/libs/lvgl/lv_themes/lv_themes.mk",
"chars": 232,
"preview": "CSRCS += lv_theme.c\nCSRCS += lv_theme_default.c\nCSRCS += lv_theme_templ.c\nCSRCS += lv_theme_material.c\n\nDEPPATH += --dep"
}
]
// ... and 224 more files (download for full content)
About this extraction
This page contains the full source code of the CTCaer/hekate GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 424 files (5.5 MB), approximately 1.5M tokens, and a symbol index with 3139 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.