RK3368 Recovery界面旋转方向调试

Platform: RK3368
OS: Android 6.0
Kernel: 3.10.0

文章目录

  • RK3368 Recovery界面旋转方向调试
    • 1. 打开recovery串口打印调试
    • 2. 修改代码
    • 3. 编译

1. 打开recovery串口打印调试

修改bootable/recovery/Android.mk文件,将日志打印重定向到串口,方便调试.

@@ -60,7 +60,7 @@ LOCAL_CFLAGS += -D_FILE_OFFSET_BITS=64#SDCARD: save log to sdcard#CACHE: save log to /cache/recovery/ dir#UART: redirect log to uart output
-REDIRECT_LOG_TO := CACHE
+REDIRECT_LOG_TO := UARTLOCAL_C_INCLUDES := \$(prebuilt_stdcxx_PATH)/gnu-libstdc++/include\

2. 修改代码

旋转UI代码参考了:Android O恢复出厂设置时,图标和屏的方向不一致;
修改当前设备的BoardConfig.mk,定义需要旋转的角度:

BOARD_RECOVERY_UI_ROTATION := 270

修改bootable/recovery/minui/Android.mk,添加以下代码:

+ifeq ($(strip $(BOARD_RECOVERY_UI_ROTATION)), 0)
+  LOCAL_CFLAGS += -DBOARD_RECOVERY_UI_ROTATION_0
+else
+ifeq ($(strip $(BOARD_RECOVERY_UI_ROTATION)), 90)
+  LOCAL_CFLAGS += -DBOARD_RECOVERY_UI_ROTATION_90
+else
+ifeq ($(strip $(BOARD_RECOVERY_UI_ROTATION)), 180)
+  LOCAL_CFLAGS += -DBOARD_RECOVERY_UI_ROTATION_180
+else
+ifeq ($(strip $(BOARD_RECOVERY_UI_ROTATION)), 270)
+  LOCAL_CFLAGS += -DBOARD_RECOVERY_UI_ROTATION_270
+else
+  LOCAL_CFLAGS += -DBOARD_RECOVERY_UI_ROTATION_0
+endif
+endif
+endif
+endif
+

bootable/recovery/minui/graphics_fbdev.cpp添加旋转方向代码:

static GRSurface *gr_rotate_draw = NULL;
#define swap(a, b)             \do                         \{                          \typeof(a) __tmp = (a); \(a) = (b);             \(b) = __tmp;           \} while (0)static GRSurface *rotate_surface_init(GRSurface *surface)
{static GRSurface *rotateSurface = (GRSurface *)malloc(sizeof(GRSurface));if (rotateSurface == NULL){return NULL;}memcpy(rotateSurface, surface, sizeof(GRSurface));#if defined(BOARD_RECOVERY_UI_ROTATION_90) || defined(BOARD_RECOVERY_UI_ROTATION_270)swap(rotateSurface->width, rotateSurface->height);rotateSurface->row_bytes = rotateSurface->width * rotateSurface->pixel_bytes;
#endifrotateSurface->data = (unsigned char *)malloc(rotateSurface->height * rotateSurface->row_bytes);if (rotateSurface->data == NULL){free(rotateSurface);return NULL;}memset(rotateSurface->data, 0, rotateSurface->height * rotateSurface->row_bytes);return rotateSurface;
}static void rotate_surface_exit(GRSurface *surface)
{if (surface){if (surface->data)free(surface->data);free(surface);}surface = NULL;
}static void rotate_surface_0(GRSurface *dst, GRSurface *src)
{memcpy(dst->data, src->data, src->height * src->row_bytes);
}static void rotate_surface_270(GRSurface *dst, GRSurface *src)
{int v, w, h;unsigned int *src_pixel;unsigned int *dst_pixel;for (h = 0, v = src->width - 1; h < dst->height; h++, v--){for (w = 0; w < dst->width; w++){dst_pixel = (unsigned int *)(dst->data + dst->row_bytes * h);src_pixel = (unsigned int *)(src->data + src->row_bytes * w);*(dst_pixel + w) = *(src_pixel + v);}}
}static void rotate_surface_180(GRSurface *dst, GRSurface *src)
{int v, w, k, h;unsigned int *src_pixel;unsigned int *dst_pixel;for (h = 0, k = src->height - 1; h < dst->height && k >= 0; h++, k--){dst_pixel = (unsigned int *)(dst->data + dst->row_bytes * h);src_pixel = (unsigned int *)(src->data + src->row_bytes * k);for (w = 0, v = src->width - 1; w < dst->width && v >= 0; w++, v--){*(dst_pixel + w) = *(src_pixel + v);}}
}static void rotate_surface_90(GRSurface *dst, GRSurface *src)
{int w, k, h;unsigned int *src_pixel;unsigned int *dst_pixel;for (h = 0; h < dst->height; h++){for (w = 0, k = src->height - 1; w < dst->width; w++, k--){dst_pixel = (unsigned int *)(dst->data + dst->row_bytes * h);src_pixel = (unsigned int *)(src->data + src->row_bytes * k);*(dst_pixel + w) = *(src_pixel + h);}}
}

修改open_fbdev, fbdev_flip, fbdev_exit:

 minui_backend* open_fbdev() {return &my_backend;
@@ -220,7 +298,9 @@ static GRSurface* fbdev_init(minui_backend* backend) {fbdev_blank(backend, true);fbdev_blank(backend, false);-    return gr_draw;
+    //return gr_draw;
+    gr_rotate_draw = rotate_surface_init(gr_draw);
+    return gr_rotate_draw;}static GRSurface* fbdev_flip(minui_backend* backend __unused) {
@@ -237,26 +317,46 @@ static GRSurface* fbdev_flip(minui_backend* backend __unused) {ucfb_vaddr[idx + 2] = tmp;}#endif
+
+#ifdef BOARD_RECOVERY_UI_ROTATION_0
+        rotate_surface_0(gr_draw, gr_rotate_draw);
+#else
+#ifdef BOARD_RECOVERY_UI_ROTATION_90
+        rotate_surface_90(gr_draw, gr_rotate_draw);
+#else
+#ifdef BOARD_RECOVERY_UI_ROTATION_180
+        rotate_surface_180(gr_draw, gr_rotate_draw);
+#else
+#ifdef BOARD_RECOVERY_UI_ROTATION_270
+        rotate_surface_270(gr_draw, gr_rotate_draw);
+#else
+        rotate_surface_0(gr_draw, gr_rotate_draw);
+#endif
+#endif
+#endif
+#endif
+// Change gr_draw to point to the buffer currently displayed,// then flip the driver so we're displaying the other buffer// instead.gr_draw = gr_framebuffer + displayed_buffer;
-#ifdef BOARD_HAS_FLIPPED_SCREEN
-        rk_rotate_surface_180( &gr_framebuffer[1-displayed_buffer]);
-#endif
+set_displayed_framebuffer(1-displayed_buffer);} else {// Copy from the in-memory surface to the framebuffer.memcpy(gr_framebuffer[0].data, gr_draw->data,gr_draw->height * gr_draw->row_bytes);}
-    return gr_draw;
+    //return gr_draw;
+       return gr_rotate_draw;}static void fbdev_exit(minui_backend* backend __unused) {close(fb_fd);fb_fd = -1;+    rotate_surface_exit(gr_rotate_draw);
+if (!double_buffered && gr_draw) {free(gr_draw->data);free(gr_draw);

3. 编译

执行以下命令,可以单独编译recovery,但是需要重新刷入recovery.img进行测试验证.

$ source build/envsetup.sh
$ touch bootable/recovery/minui/*
$ make recoveryimage -j8

RK3368 Recovery界面旋转方向调试相关推荐

  1. rk3368 Android9.0 升级固件后,一直在recovery界面

    升级固件后,一直在recovery界面 Platform: RK3368 OS: Android 9.0 Kernel: 4.4.194 文章目录 升级固件后,一直在recovery界面 1. 串口日 ...

  2. Android 屏幕旋转方向和屏幕起始原点的关系

    我们调试的平板设备大部分默认都是竖屏模式(估计是受手机影响),设备平放,系统自带开机动画界面的显示起始点即为屏幕的起始原点,就是屏幕旋转的0°角. 假定设备初始方向为竖屏模式,LCD的起始原点有可能出 ...

  3. 【转】Unity3D研究院之设置自动旋转屏幕默认旋转方向

    http://www.xuanyusong.com/archives/2871 如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求 ...

  4. 在Android的 设置-显示 中增加控制屏幕旋转方向的选项

    在Android的 设置->显示 中增加控制屏幕旋转方向的选项 参考博文 实现目标 效果局限 代码实现 配置资源文件 界面搭建 功能实现 默认值修改 其他情况 结语 参考博文 Android-x ...

  5. OpenGL着色器透视变换实例-通过旋转平移调试着色器

    OpenGL 着色器新手样例 带透视变换和旋转平移缩放 OpenGL着色器样例 - 最简单的顶点着色器 + 片元着色器 头文件和宏定义 全局变量部分 读取着色器 从文本中读取着色器代码 初始化着色器 ...

  6. Android 11.0 recovery页面旋转180度问题的解决方案

    1.前言 在11.0的系统rom定制化开发工作中,在系统中recovery的页面也是相关重要的一部分,在系统recovery ota升级等功能,都是需要recovery功能的,在某些产品定制化中 在r ...

  7. 如何framework层任意设置Android屏幕的旋转方向

    设备平放,屏幕朝正上方.以下四个常量分别代表: private static final int ROTATION_0 = 0;//初始情况.这个时候设备是横屏还是竖屏与硬件设备安装时默认的显示方向有 ...

  8. Android UVC摄像头方向调试

    Platform: RK3368 OS: Android 6.0 Kernel: 3.10.0 UVC摄像头方向调试 方法1修改CameraHal 修改代码位置hardware/rockchip/ca ...

  9. 【Android RTMP】NV21 图像旋转处理 ( 问题描述 | 图像顺时针旋转 90 度方案 | YUV 图像旋转细节 | 手机屏幕旋转方向 )

    文章目录 安卓直播推流专栏博客总结 一. NV21 图像格式与 Camera图像传感器方向问题 二. NV21 图像格式视频旋转 1. 图像旋转问题及解决方案 ( 顺时针旋转 90 度 ) 2. NV ...

最新文章

  1. 使用eclipse生成html格式注释文档 [ javadoc ]
  2. docker笔记1----Get Docker
  3. jacoco底层原理解析
  4. [SQL基础教程]1-4 SQL 表的创建
  5. webflux 对url参数的接收处理
  6. C++ STL string的属性
  7. Linux学习笔记 第三课 目录结构及简单命令
  8. 关于Eclipse中各个文件(*.java *.jsp *.xml)文字大小的设定。
  9. 2018国家网络安全宣传周系列漫画
  10. 电视html转vga没有声音,解决传统VGA接口无声音输出的设备的制作方法
  11. thinkpad s5黑将摄像头最新驱动_第一款以iOS方式运行的安卓手机:联想新机S5黑科技震撼来袭!...
  12. h5将word转为html,怎么把Word版通知转化成H5版
  13. C语言中结构体所占内存空间
  14. pandas.read_csv读取数据时出现省略号
  15. Windows安装MySql
  16. 后端接口如何提高性能?
  17. Python学习_2015年12月14日
  18. 汇编语言程序设计 --- 一元二次方程ax2+bx+c=0求解(含注释详细源代码)
  19. 火山视窗opencv计算机视觉入门
  20. 程序员小强转行记#0002

热门文章

  1. 网络错误7002_jquery - SCRIPT7002:XMLHttpRequest:网络错误0x2ef3,由于错误00002ef3无法完成操作...
  2. 【初级web前端工程师】2020年工作总结PPT
  3. dbms 计算机辅助设计,计算机辅助设计(CAD).ppt
  4. 【L2-019 悄悄关注 】天梯赛L2系列详解
  5. Adobe Acrobat DC + Java 生成pdf
  6. win8(64位)下memcache安装时报错“ failed to install service or service already installed”
  7. 现有SNS产品对比分析
  8. 转贴:网友line写的火鸟字幕合并器教程
  9. flash特效原理:粒子爆
  10. Flash 特效原理:图片平面墙