Android屏幕旋转总结

news/2025/3/14 5:34:18/

转自:http://www.myexception.cn/operating-system/1452058.html

 

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
             }
          }

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

转载于:https://www.cnblogs.com/dirt2/p/5910381.html


http://www.ppmy.cn/news/917594.html

相关文章

Linux下软件安装的命令

源码安装 以源代码安装软件&#xff0c;每次都需要配置操作系统、配置编译参数、实际编译&#xff0c;最后还要依据个人喜好的方式来安装软件。这个过程很麻烦很累人。 RPM安装软件的默认路径: 注意&#xff1a; /etc 配置文件放置目录/usr/bin 一些可执行文件/usr/lib 一些程…

从星座文化走红背后,看其发展新前景

前不久&#xff0c;微博知名星座博主同道大叔在北京西单大悦城举办了一系列以星座为主题的活动&#xff0c;涵盖“星座好奇屋”、“星座名人堂”、“狮子座霸气高校”以及“狮王扭蛋机”四大展区的星座奇趣展和狮子月生日趴吸引了不少年轻人的注意。 在今年初&#xff0c;星座…

业务知识记录

目录 一.认识目标用户 1.1用户分析体系 1.1.1 用户标签 1.1.2用户画像 1.1.3用户需求挖掘 1.1.4用户生命周期 1.1.5用户细分 1.1.6用户分层 1.2用户增长 1.2.1用户增长 1.2.2用户活跃 1.2.5用户流失 二.理解营销策略&#xff1a;数据助力3大场景 2.1营销的基本概…

万字长文 | 一文带你读懂账号体系

本文由作者 阿境 于社区发布 经手过诸多项目&#xff0c;行业各异&#xff0c;类型各异&#xff0c;但却有个共同点&#xff1a;均涉及到账号体系&#xff0c;看似不难&#xff0c;但深究起来&#xff0c;却也值得思考&#xff0c;细细品味。 于是乎&#xff0c;便有了这篇文章…

2021流行词“私域流量”

今天中国网民数量已经超过10亿&#xff0c;趋近中国人口总数&#xff0c;也就是说互联网上的公域流量饱和了&#xff0c;但竞争企业还在不断增加&#xff0c;流量获取成本水涨船高。如果以前是大家一起在海洋里捞鱼的时代&#xff0c;那接下来就是自己养鱼的时代了&#xff0c;…

助你获取微信亿级流量的21种小程序推广攻略

21种小程序推广攻略 从2017年1月到2018年12月,近两年时间,小程序已然成为炙手可热的流量风口,很多企业纷纷入局其中,都希望从这个庞大的流量池里分一杯羹。他们当中,有的已经脱颖而出,成为大家耳熟能详的头部小程序,但更多的还在艰难求索,深陷推广泥沼无法自拔。 因此,…

一文读懂账号体系产品设计

一、账号体系的概念及价值 账号体系是用户在各平台上的通行证。 平台给与用户可持续的服务&#xff0c;用户在平台上获取价值&#xff0c;中间的媒介&#xff0c;便是账号体系。 阿境将其理解为维系用户与平台之间的枢纽。 注&#xff1a;本文中&#xff0c;账号账户&#xff0…

阿里、京东、亚马逊为何如此重视重构“会员”?

两天前&#xff0c;屈臣氏集团宣布在全球推出VIP尊尚会员计划&#xff0c;将在2019年初之前推广至24个营运市场。升级后的会员将针对不同地区推出不同的服务。 同样是会员业务调整&#xff0c;一周前&#xff0c;饿了么与汉堡王宣布&#xff0c;将于9月底打通双方的会员体系&am…