RK3368 Recovery界面旋转方向调试
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界面旋转方向调试相关推荐
- rk3368 Android9.0 升级固件后,一直在recovery界面
升级固件后,一直在recovery界面 Platform: RK3368 OS: Android 9.0 Kernel: 4.4.194 文章目录 升级固件后,一直在recovery界面 1. 串口日 ...
- Android 屏幕旋转方向和屏幕起始原点的关系
我们调试的平板设备大部分默认都是竖屏模式(估计是受手机影响),设备平放,系统自带开机动画界面的显示起始点即为屏幕的起始原点,就是屏幕旋转的0°角. 假定设备初始方向为竖屏模式,LCD的起始原点有可能出 ...
- 【转】Unity3D研究院之设置自动旋转屏幕默认旋转方向
http://www.xuanyusong.com/archives/2871 如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求 ...
- 在Android的 设置-显示 中增加控制屏幕旋转方向的选项
在Android的 设置->显示 中增加控制屏幕旋转方向的选项 参考博文 实现目标 效果局限 代码实现 配置资源文件 界面搭建 功能实现 默认值修改 其他情况 结语 参考博文 Android-x ...
- OpenGL着色器透视变换实例-通过旋转平移调试着色器
OpenGL 着色器新手样例 带透视变换和旋转平移缩放 OpenGL着色器样例 - 最简单的顶点着色器 + 片元着色器 头文件和宏定义 全局变量部分 读取着色器 从文本中读取着色器代码 初始化着色器 ...
- Android 11.0 recovery页面旋转180度问题的解决方案
1.前言 在11.0的系统rom定制化开发工作中,在系统中recovery的页面也是相关重要的一部分,在系统recovery ota升级等功能,都是需要recovery功能的,在某些产品定制化中 在r ...
- 如何framework层任意设置Android屏幕的旋转方向
设备平放,屏幕朝正上方.以下四个常量分别代表: private static final int ROTATION_0 = 0;//初始情况.这个时候设备是横屏还是竖屏与硬件设备安装时默认的显示方向有 ...
- Android UVC摄像头方向调试
Platform: RK3368 OS: Android 6.0 Kernel: 3.10.0 UVC摄像头方向调试 方法1修改CameraHal 修改代码位置hardware/rockchip/ca ...
- 【Android RTMP】NV21 图像旋转处理 ( 问题描述 | 图像顺时针旋转 90 度方案 | YUV 图像旋转细节 | 手机屏幕旋转方向 )
文章目录 安卓直播推流专栏博客总结 一. NV21 图像格式与 Camera图像传感器方向问题 二. NV21 图像格式视频旋转 1. 图像旋转问题及解决方案 ( 顺时针旋转 90 度 ) 2. NV ...
最新文章
- 使用eclipse生成html格式注释文档 [ javadoc ]
- docker笔记1----Get Docker
- jacoco底层原理解析
- [SQL基础教程]1-4 SQL 表的创建
- webflux 对url参数的接收处理
- C++ STL string的属性
- Linux学习笔记 第三课 目录结构及简单命令
- 关于Eclipse中各个文件(*.java *.jsp *.xml)文字大小的设定。
- 2018国家网络安全宣传周系列漫画
- 电视html转vga没有声音,解决传统VGA接口无声音输出的设备的制作方法
- thinkpad s5黑将摄像头最新驱动_第一款以iOS方式运行的安卓手机:联想新机S5黑科技震撼来袭!...
- h5将word转为html,怎么把Word版通知转化成H5版
- C语言中结构体所占内存空间
- pandas.read_csv读取数据时出现省略号
- Windows安装MySql
- 后端接口如何提高性能?
- Python学习_2015年12月14日
- 汇编语言程序设计 --- 一元二次方程ax2+bx+c=0求解(含注释详细源代码)
- 火山视窗opencv计算机视觉入门
- 程序员小强转行记#0002
热门文章
- 网络错误7002_jquery - SCRIPT7002:XMLHttpRequest:网络错误0x2ef3,由于错误00002ef3无法完成操作...
- 【初级web前端工程师】2020年工作总结PPT
- dbms 计算机辅助设计,计算机辅助设计(CAD).ppt
- 【L2-019 悄悄关注 】天梯赛L2系列详解
- Adobe Acrobat DC + Java 生成pdf
- win8(64位)下memcache安装时报错“ failed to install service or service already installed”
- 现有SNS产品对比分析
- 转贴:网友line写的火鸟字幕合并器教程
- flash特效原理:粒子爆
- Flash 特效原理:图片平面墙