转自: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
             }
          }

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

Android屏幕旋转总结的更多相关文章

  1. Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

    的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ...

  2. 【Android】[转] Android屏幕旋转使用OrientationEventListener的监听

    说明 遇到一个奇葩的问题,我在使用onConfigChanged拦截屏幕的横竖屏旋转时,发现直接进行180度的横屏/竖屏转换居然没有反应!查找原因发现仅对landscape或者portrait状态有用 ...

  3. android 屏幕旋转

    转自:http://blog.csdn.net/oyzhizhong/article/details/8131799 屏是LANDSCAPE的,要让它默认显示为PORTRAIT. 1.kernel里要 ...

  4. Android屏幕旋转

    一个手机最基本的旋转方向有上面4种,而在Android开发中,涉及到屏幕旋转的地方很多,而且各个函数给出的角度值都不一样,比如 Activity的getRotate,Camera的setDisplay ...

  5. android 屏幕旋转 不重新加载oncreate

    当手机设定了使用横屏或者竖屏的时候,还想要使用重力感应,可以设置activity属性 android:screenOrientation="sensor" 但是每次翻转屏幕,都会重 ...

  6. Qt for Android 程序禁止屏幕旋转

    有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screen ...

  7. 设置Android默认锁定屏幕旋转

    /********************************************************************************** * 设置Android默认锁定屏 ...

  8. 【转】如何在 Android 程序中禁止屏幕旋转和重启Activity

    原文网址:http://www.cnblogs.com/bluestorm/p/3665890.html 禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变 ...

  9. android学习---屏幕旋转

    /** *问题:今天学习android访问Servlet,Servlet给返回一个xml格式的字符串,android得到数据后将其显示到一个TextView中,发现Activity得到数据显 * 示到 ...

随机推荐

  1. class training

    实验3-1 分别使用while循环.do while循环.for循环求 (即求1+2+3+ --+100). 参考: 源码 方法一#include<stdio.h> int main(){ ...

  2. eclipse中整合springMvc和velocity

    1.项目所需要的jar包(有些可能多余) 2.在src目录下创建一个bean  一个一个controller ,路径如下 person代码: package com.test.bean; import ...

  3. ThinkPHP函数详解:F方法(快速缓存方法)

    在Think中S方法的用法,F方法其实是S方法的一个子集功能, 仅用于简直数据缓存,并且只能支持文件形式,不支持缓存有效期,因为采用 的是PHP返回方式,所以其效率较S方法较高,因此我们也称之为快速缓 ...

  4. Arlenmbx!!!!

    我无限制的以安逸为想法 其实生活的不安逸 我所做的事情和思路到底正不正确? 我失败了? 我做不到? 我尝试做到? 我可以做到! 我能做到 我做到了我已经做到了 难道想法和现实是有区别的吗 有理想只是空 ...

  5. minigui移植到arm linux开发板上无法执行

    要保证目录下有该文件 /etc/MiniGUI.cfg 复制过程使用cp –af 强制复制

  6. python程序性能分析

    中文:http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html 英文:https://www.huyng.com/posts/pyth ...

  7. Objective C 快速入门学习四

    类 1.合成存取器方法 @property   成员变量 @synthesize 成员变量 可以让编译器自动合成 设置和获取函数的方法,不用手动生成set成员变量,Get成员变量 @interface ...

  8. HTML页面的布局

    1.纵向切分页面:CSS POSITION的默认值为:STATIC 1) <html> <head> <title>Hello</title> < ...

  9. IPC-----POSIX消息队列

    消息队列可以认为是一个链表.进程(线程)可以往里写消息,也可以从里面取出消息.一个进程可以往某个消息队列里写消息,然后终止,另一个进程随时可以从消息队列里取走这些消息.这里也说明了,消息队列具有随内核 ...

  10. IDEA 编译时报错 “未结束的字符串文字” “解析时已经达到文件结尾”

    Information:Using javac 1.7.0_75 to compile java sourcesInformation:java: Errors occurred while comp ...