`

[转载] LCM180度翻转方案

mtk 
阅读更多
[FAQ05711] LCM180度翻转方案
Platform:MT6589MT6572
Branch:JB2JB3

FAQ Content

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中的刷新顺序,请修改Pathalps/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.cppFunction: mt65xx_surface_init

6. Factory Mode,请修改Path: alps/mediatek/factory/src/miniui/Graphics.cFunction: 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
             }
          }

                 ......
          ......
}

 

分享到:
评论

相关推荐

    lcm 饱和度调试相关测试

    lcm 调试相关测试包括饱和度、灰度、帧率等

    读取LCM的日志文件

    这个程序可以用,但是由于调试用的lcm数据涉及到机密,故调试日志文件暂不上传,这个程序可以将lcm保存在日志中的数据抓出来 lcm(Lightweight Communications and Marshalling) 是一组类库(含多种语言如java,c等)...

    LCM08F18_08F003_20190404_SDK_V01_领芯LCM08F18_LCM08F003_08F003_LCM

    领芯单片机LCM08F18_08F003例程,芯片与市面上大部分003单片机pin对pin

    LCM采光技术设计 LCM采光技术设计

    LCM采光技术设计LCM采光技术设计LCM采光技术设计

    关于LCM0825的程序

    关于LCM0825的程序关于LCM0825的程序关于LCM0825的程序关于LCM0825的程序关于LCM0825的程序

    LCM1602/LCM1620驱动

    LCM1602/LCM1620液晶驱动,包括驱动代码和完整测试工程,可简单修改后直接使用

    LCM045/LCM103驱动/手册,数码管软件编码器

    LCM045驱动程序可用于其它LCM系列液晶 另附一些资料,包括LCM045 LCM103手册,两个数码管编码器

    232-液晶LCM1602(51单片机C语言实例Proteus仿真和代码)

    232-液晶LCM1602(51单片机C语言实例Proteus仿真和代码)232-液晶LCM1602(51单片机C语言实例Proteus仿真和代码)232-液晶LCM1602(51单片机C语言实例Proteus仿真和代码)232-液晶LCM1602(51单片机C语言实例Proteus仿真和...

    Hyperion LCM迁移手册

    Hyperion生命周期管理 LCM迁移文档,适用于海波龙项目实施

    LCM046的ATmega8驱动

    作为LCM103驱动代码的姊妹篇,ATmega8驱动LCM046段式液晶,控制端口可方便的在LCM046.h中修改,方便在AVR系列单片机上移植。LCM046.h和LCM046.c中详细解释了单片机和LCM046的连接方法,方便初学者移植。

    LCM103ATmega8驱动

    ATmega8驱动LCM103段式液晶,控制端口可方便的在LCM103.h中修改,方便在AVR系列单片机上移植。LCM103.h和LCM103.c中详细解释了单片机和LCM103的连接方法,方便初学者移植。

    lcm1602程序.pdf

    lcm1602程序.pdf

    proteus对LCM1602的仿真

    proteus对LCM1602的仿真 51单片机控制LCM1602

    msp430驱动lcm

    msp430驱动lcm.cmsp430驱动lcm.cmsp430驱动lcm.cmsp430驱动lcm.cmsp430驱动lcm.cmsp430驱动lcm.cmsp430驱动lcm.c

    LCM2401281

    LCM2401281使用说明书 北京青云创新科技发展有限公司

    51单片机驱动LCM1602

    驱动LCM1602,LCM1602为深圳誉信公司的16*2液晶字符型显示模块,程序使用读写方式控制LCM1602,地址分别为:写指令口:80H; 读忙检查口:81H; 写数据口:82H; 读数据口:83H; ;子程序1:写控制指令子程序 ;子程序2:写CGRAM...

    LCM培训资料

    LCM、新人培训、入门学习、制程工艺、LCM、新人培训

    Opto22 LCM4

    Opto22 lCM4 使用手册 详细讲解了LCM4的使用方法

    lcm19264c资料

    LCM19264C中文资料,时序、指令表等都有,QQ29529485。有问题可以联系我。

    lcm.rar_lcm

    LCM source code of asm,LCM source code of asm,LCM source code of asm

Global site tag (gtag.js) - Google Analytics