1. ProjectConifg.mk中定义宏MTK_LCM_PHYSICAL_ROTATION=180,定义此宏后,Surface Flinger会读取rotate属性对画面进行反转刷新,因此正常开机后的所有画面都可以实现翻转180度刷新
2. LK Logo修改,包括开机第一张Logo,以及充电Logo,由于LK阶段Surface Flinger没有启动,MTK_LCM_PHYSICAL_ROTAION不会作用,实现反转显示方法有二,一,替换Logo资源,使用原有资源翻转180度的资源替换之;二,调整Frame Buffer中的刷新顺序,需要修改Path: alps/mediatek/platform/mt6589/lk; Function:show_logo
3. Kernel Logo修改,类似于LK Logo,方法有二,一,使用反转180度的Logo资源替换原有资源;二,调整Frame Buffer中的刷新顺序,请修改Path:alps/mediate/external/boot_logo_updater/boot_logo_updater; Function: main()
4. 开关机动画,请修改Path: alps/frameworks/base/cmds/bootanimation/bootanimation.cpp
Function: BootAnimation::readyToRun()
5. IPO,请修改Path: alps/mediatek/external/ipod/Bootlogo.cpp,Function: mt65xx_surface_init
6. Factory Mode,请修改Path: alps/mediatek/factory/src/miniui/Graphics.c,Function: gr_flip()
7. Recovery Mode,请修改Path: alps/bootable/recovery/miniui/Graphics.c. Function: gr_flip()
8. 如果只有屏幕发生反转,TP不需要反转,请在tp driver中,tpd_up 与tpd_down函数报x, y坐标时 更改为 (x = LCM_WIDTH-x) , (y= LCM_HEIGHT-y)
9. 如果关机动画依然没有旋转,请修改Alps\frameworks\native\libs\gui\SurfaceComposerClient.cpp
10. volume up+power key进入boot mode菜单, engineer build下开机模式字符串,以及recovery mode进入选择菜单需要翻转180度,请参考下面的方案:
①. 在\alps\bootable\bootloader\lk\dev\video\cfb_console.c文件中增加以下函数:
#define SWAP32_16(x) ((((x) & 0x0000ffff) << 16) | (((x) & 0xffff0000) >> 16)) //mtk add
video_drawchars()
{
......
......
case GDF_16BIT_565RGB:
//mtk add begin
if (0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3))
{
while (count--) {
c = *s;
cdat = video_fontdata + (c + 1) * VIDEO_FONT_HEIGHT - 1;
for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
rows--;
dest += VIDEO_LINE_LEN) {
u8 bits = *cdat--;
((u32 *) dest)[0] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits & 3] & eorx) ^ bgx));
((u32 *) dest)[1] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits >> 2 & 3] & eorx) ^ bgx));
((u32 *) dest)[2] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits >> 4 & 3] & eorx) ^ bgx));
((u32 *) dest)[3] = SWAP32_16(SHORTSWAP32 ((video_font_draw_table16 [bits >> 6] & eorx) ^ bgx));
}
dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
s++;
}
}
else
{
//mtk add end
while (count--) {
c = *s;
cdat = video_fontdata + c * VIDEO_FONT_HEIGHT;
for (rows = VIDEO_FONT_HEIGHT, dest = dest0;
rows--;
dest += VIDEO_LINE_LEN) {
u8 bits = *cdat++;
((u32 *) dest)[0] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 6] & eorx) ^ bgx);
((u32 *) dest)[1] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 4 & 3] & eorx) ^ bgx);
((u32 *) dest)[2] = SHORTSWAP32 ((video_font_draw_table16 [bits >> 2 & 3] & eorx) ^ bgx);
((u32 *) dest)[3] = SHORTSWAP32 ((video_font_draw_table16 [bits & 3] & eorx) ^ bgx);
}
dest0 += VIDEO_FONT_WIDTH * VIDEO_PIXEL_SIZE;
s++;
}
}//mtk add
break;
......
......
}
void video_puts (const char *s)
{
int count = strlen (s);
//mtk add begin
if (0 == strncmp(MTK_LCM_PHYSICAL_ROTATION, "180", 3))
{
while (count--)
{
video_putc_ext (*s++);
}
}
else
{
//mtk add end
while (count--)
video_putc (*s++);
}
mt_disp_update(0, 0, CFG_DISPLAY_WIDTH, CFG_DISPLAY_HEIGHT);
}
//mtk add begin
void video_putc_ext (const char c)
{
static int nl = 1;
// Jett: check newline here in order to
// scroll the screen immediately for the first time video_printf()
//
if (console_col >= CONSOLE_COLS)
console_newline ();
switch (c) {
case 13: /* back to first column */
console_cr ();
break;
case '\n': /* next line */
if (console_col || (!console_col && nl))
console_newline ();
nl = 1;
break;
case 9: /* tab 8 */
CURSOR_OFF console_col |= 0x0008;
console_col &= ~0x0007;
if (console_col >= CONSOLE_COLS)
console_newline ();
break;
case 8: /* backspace */
console_back ();
break;
default: /* draw the char */
video_putchar ((CONSOLE_COLS - console_col - 1) * VIDEO_FONT_WIDTH,
(CONSOLE_ROWS - console_row) * VIDEO_FONT_HEIGHT,
c);
console_col++;
/* check for newline */
if (console_col >= CONSOLE_COLS) {
console_newline ();
nl = 0;
}
}
CURSOR_SET}
//mtk add end
②. 在\alps\mediatek\platform\mt6572\lk\boot_mode_menu.c里面修改boot_mode_menu_select()这个函数,
void boot_mode_menu_select()
{
......
......
else if(mtk_detect_key(MT65XX_MENU_OK_KEY))//VOL_DOWN,
{
//use for OK
video_clean_screen(); //mtk add
break;
}
else
{
//pass
}
}
......
......
}
相关推荐
标题中的"LCM08F18_08F003_20190404_SDK_V01_领芯LCM08F18_LCM08F003_08F003_LCM"指的是领芯(可能是某家专注于微控制器的公司)发布的一款SDK(Software Development Kit),该SDK对应的是LCM08F18和LCM08F003型号...
在LCM的调试过程中,饱和度、灰度和帧率是三个关键参数,直接影响到显示效果的质量。 饱和度是色彩的一个重要属性,指的是颜色的纯度或强度。在LCM中,调整饱和度可以改变显示图像的颜色鲜艳程度。高饱和度让图像...
这个程序可以用,但是由于调试用的lcm数据涉及到机密,故调试日志文件暂不上传,这个程序可以将lcm保存在日志中的数据抓出来 lcm(Lightweight Communications and Marshalling) 是一组类库(含多种语言如java,c等)...
LCM045A编程是针对青云创新公司生产的LCM045A液晶显示屏进行的一种编程实践。LCM(Liquid Crystal Module)即液晶模块,是电子设备中常见的一种显示部件,广泛应用于各类仪器仪表、手机、电视和其他嵌入式系统。LCM...
LCM1602/LCM1620液晶显示器是一种常见的字符型液晶模块,广泛应用于电子设备的显示界面,如嵌入式系统、单片机项目等。它们通常由一个16x2或16x4的字符矩阵组成,能够显示两行或四行文本信息。这种显示器具有低成本...
### 高通平台LCM调试指南 #### 一、LCM与显示驱动程序开发 **1.1 介绍** 本文档旨在提供一个详尽的指南,帮助开发人员理解和执行高通平台上的LCM (Liquid Crystal Module, 液晶模块) 调试流程。LCM调试对于多媒体...
LCM045驱动程序是一种专门设计的软件组件,它使得开发者能够通过编程控制LCM045模块,实现显示内容的更新、亮度调节、对比度设置等功能。这种驱动可能支持多种编程语言,如C、C++或Python,并提供API函数供应用程序...
### MTK LCM总结 MTK LCM(Liquid Crystal Module)总结主要针对的是在联发科(MediaTek,简称MTK)平台上的液晶模块配置、初始化及驱动开发的相关知识点进行详细解析。 #### 1. Project Configuration 在项目的...
液晶显示模块(LCM,Liquid Crystal Module)是嵌入式系统中常见的显示设备,用于呈现文本、图形等信息。在C语言环境下编程控制LCM,主要是为了实现与硬件的交互,展示所需的数据或界面。本篇文章将深入探讨LCM在...
液晶屏(Liquid Crystal Display, LCD)是广泛应用在各种电子设备中的显示技术,它以其低功耗、薄型化和高清晰度的特点深受青睐。在本文中,我们将详细探讨LCM,特别是针对“LCM103”型号的液晶屏,以及如何用C语言...
2. **初始化序列**:在开始使用LCM0825前,必须发送一系列初始化命令来设置显示参数,如对比度、偏置电压、显示模式等。这些命令通常由特定的指令代码和数据组成,需要按照正确的顺序发送。 3. **控制命令**:LCM...
背光源采光技术是目前最为广泛应用于液晶显示中的采光方案,旨在确保液晶显示器件无论在明亮还是暗淡的环境中都能保持清晰、亮丽的显示效果。背光源的设计与选择直接影响到显示质量、能耗以及设备的整体设计。 ####...
LCM驱动是操作系统与硬件之间的桥梁,负责处理显示数据,控制液晶屏的显示效果,包括亮度、对比度、色彩等参数的设置。下面我们将深入探讨MTK LCM驱动的相关知识点。 1. **MTK平台**:MTK是台湾联发科公司推出的...
在本项目中,我们主要探讨的是如何利用Qt和LCM(Language Communication Modules)框架来创建一个publisher和listener窗口应用程序,这两个程序分别用于发送和接收图像和字符串数据。Qt是一个广泛使用的跨平台应用...
基于http://lcm-proj.github.io/的lcm 1.4.0版本软件编译的,编译环境是WIN7+VS2019,参考了https://blog.csdn.net/weixinhum/article/details/81354061的方法,release模式下编译了x86 x64和donet的相关工程,...
### ARM7操作LCM及串口扩展关键技术...通过对地址线、控制线的合理规划,以及对GPIO的有效利用,可以实现高效且灵活的扩展方案。这些技术不仅可以应用于LPC22xx系列微控制器,也可以推广到其他类似的嵌入式系统开发中。
LCM(Language Communication Modules)是一种开源的、跨平台的通信协议和库,主要用于在不同的进程中进行高效、可靠的异步数据通信。"extlib_lcm.rar" 文件是一个包含LCM源码的压缩包,用户可以下载并编译生成动态...
LCD+OLED+LCM屏选型手册包括LCM101 CM103 LCD1602 LCD12864等, 0596-DEMO上板图纸6-15.pdf 12864中文字库型液晶模块手册.pdf 12864汉字液晶测试电路.pdf JHD(C0G)12864A-3.3V v2.0.pdf JHD(COG)12864-ZK-A.PDF jhd...
232-液晶LCM1602(51单片机C语言实例Proteus仿真和代码)232-液晶LCM1602(51单片机C语言实例Proteus仿真和代码)232-液晶LCM1602(51单片机C语言实例Proteus仿真和代码)232-液晶LCM1602(51单片机C语言实例Proteus仿真和...