S3C6410 LCD Overlay Test Program
测试了一下S3C6410 LCD控制器提供的Overlay功能,写了一个简单的test,主要用于实现FB0和FB1之间的Overlay操作。
内核选项的Windows至少要为2。
具体支持如下操作:
1 使能OSD
2 关闭OSD
3 增加OSD的Alpha值
4 减少OSD的Alpha值
5 手动设置Alpha值(0-15)
6 上移OSD层
7 下移OSD层
8 左移OSD层
9 右移OSD层
10 设置OSD层
其中设置OSD层最重要,可以重新设置窗口的大小和起始位置,主要设置完后需要重新填充窗口数据,旧的数据将错乱。
///////////////////////////////////////////////////////////////
s3cfb.h
///////////////////////////////////////////////////////////////
#include <stdint.h>
#include <sys/types.h>
typedef struct {
int bpp;
int left_x;
int top_y;
int width;
int height;
} s3c_win_info_t;
typedef struct{
__u32 phy_start_addr;
__u32 xres;
__u32 yres;
__u32 xres_virtual;
__u32 yres_virtual;
__u32 xoffset;
__u32 yoffset;
__u32 lcd_offset_x;
__u32 lcd_offset_y;
} s3c_fb_next_info_t;
#define FBIO_WAITFORVSYNC _IOW ('F', 32, unsigned int)
#define S3C_FB_OSD_START _IO ('F', 201)
#define S3C_FB_OSD_STOP _IO('F', 202)
#define S3C_FB_OSD_SET_INFO _IOW ('F', 209, s3c_win_info_t)
#define S3C_FB_CHANGE_REQ _IOW ('F', 308, int)
#define S3C_FB_GET_CURR_FB_INFO _IOR ('F', 321, s3c_fb_next_info_t)
#define S3C_FB_OSD_ALPHA_UP _IO ('F', 203)
#define S3C_FB_OSD_ALPHA_DOWN _IO ('F', 204)
#define S3C_FB_OSD_MOVE_LEFT _IO ('F', 205)
#define S3C_FB_OSD_MOVE_RIGHT _IO ('F', 206)
#define S3C_FB_OSD_MOVE_UP _IO ('F', 207)
#define S3C_FB_OSD_MOVE_DOWN _IO ('F', 208)
#define S3C_FB_OSD_ALPHA_SET _IOW ('F', 210, unsigned int)
#define S3C_FB_OSD_ALPHA0_SET _IOW ('F', 211, unsigned int)
#define S3C_FB_OSD_ALPHA_MODE _IOW ('F', 212, unsigned int)
////////////////////////////////////////////////////////////////
osd.c
////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include "fb.h"
#include "s3cfb.h"
#define DEV_FB0 "/dev/fb0"
#define DEV_FB1 "/dev/fb1"
#define FILE1 "/overlay/1.bin"
#define FILE2 "/overlay/2.bin"
int stat,err;
int fb0,fb1;
s3c_win_info_t osd_info;
void set_osd_info(){
int input;
osd_info.bpp = 16;
printf("please input left x coordinate\n");
scanf("%d",&input);
osd_info.left_x = input;
printf("please input top y coordinate\n");
scanf("%d",&input);
osd_info.top_y = input;
printf("please input ods width\n");
scanf("%d",&input);
osd_info.width = input;
printf("please input osd height\n");
scanf("%d",&input);
osd_info.height = input;
}
int main(int argc, char *argv[])
{
printf("Begin the OSD test!\n");
if(argc < 2){
printf("Usage: ./osd 1\n"); //reserved
return -1;
}
fb0 = open("/dev/fb0",O_RDWR);
if(fb0 < 0) {
printf("open err! fb0 is %d\n",fb0);
return -1;
}
fb1 = open("/dev/fb1",O_RDWR);
if(fb1 < 0) {
printf("open err! fb1 is %d\n",fb1);
return -1;
}
stat = atoi(argv[1]);
printf("stat is %d\n",stat);
switch(stat){
case 1:
sleep(1);
ioctl(fb1,S3C_FB_OSD_START);
break;
default:
printf("err argv!\n");
}
while(1){
printf("Please choose one option:\n");
printf("1. enable the OSD\n");
printf("2. disable the OSD\n");
printf("3. + OSD alpha\n");
printf("4. - OSD alpha\n");
printf("5. set OSD alpha\n");
printf("6. move up OSD\n");
printf("7. move down OSD\n");
printf("8. move left OSD\n");
printf("9. move right OSD\n");
printf("10. SET OSD INFO\n");
printf("0. exit\n");
scanf("%d",&stat);
switch(stat){
case 1:
err = ioctl(fb1,S3C_FB_OSD_START);
if(err < 0) printf("ioctl err =%d",err);
break;
case 2:
err = ioctl(fb1,S3C_FB_OSD_STOP);
if(err < 0) printf("ioctl err =%d",err);
break;
case 3:
err = ioctl(fb1,S3C_FB_OSD_ALPHA_UP);
if(err < 0) printf("ioctl err =%d",err);
break;
case 4:
err = ioctl(fb1,S3C_FB_OSD_ALPHA_DOWN);
if(err < 0) printf("ioctl err =%d",err);
break;
case 5:
printf("please input your alpha level[0~15]\n");
scanf("%d",&stat);
err = ioctl(fb1,S3C_FB_OSD_ALPHA_SET,stat);
if(err < 0) printf("ioctl err =%d",err);
break;
case 6:
err = ioctl(fb1,S3C_FB_OSD_MOVE_UP);
if(err < 0) printf("ioctl err =%d",err);
break;
case 7:
err = ioctl(fb1,S3C_FB_OSD_MOVE_DOWN);
if(err < 0) printf("ioctl err =%d",err);
break;
case 8:
ioctl(fb1,S3C_FB_OSD_MOVE_LEFT);
break;
case 9:
err = ioctl(fb1,S3C_FB_OSD_MOVE_RIGHT);
if(err < 0) printf("ioctl err =%d",err);
break;
case 10:
set_osd_info();
err = ioctl(fb1,S3C_FB_OSD_SET_INFO,&osd_info);
if(err < 0) printf("ioctl err =%d",err);
break;
case 0:
goto exit;
default:
printf("please input number 0~10\n");
}
} //end of while(1)
exit:
sleep(1);
err = ioctl(fb1,S3C_FB_OSD_STOP);
if(err < 0) printf("ioctl err =%d",err);
return 0;
}
///////////////////////////////////////////////////////////////////////
//偷懒直接用脚本cat的图片数据test.sh
///////////////////////////////////////////////////////////////////////
#!/bin/sh
cat ./1.bin > /dev/fb0
cat ./22.bin > /dev/fb1
#cat ./3.bin > /dev/fb2
#cat ./4.bin > /dev/fb3
#cat ./5.bin > /dev/fb4
./osd 1

S3C6410 LCD Overlay Test Program的更多相关文章
- S3C6410 LCD驱动分析(转)
一. 理论分析1. 几个概念:FIMC : Fully Interactive Mobile Camera (完全交互式移动摄像机)FIMD: Fully Interactive Mob ...
- 第五章——搭建S3C6410开发板的测试环境
搭建S3C6410开发板的测试环境 通过本章的学习学会了如何在开发板上安装Android.开发板是学习和开发嵌入式技术的主要硬件设备,想要顺利的通过linux驱动访问硬件,是不能在PC板上模拟的,需要 ...
- 【转】用Device tree overlay掌控Beaglebone Black的硬件资源
原文网址:https://techfantastic.wordpress.com/2013/11/15/beaglebone-black-device-tree-overlay/ 经过一晚上的Goog ...
- 聊聊Beaglebone Black的cape和device tree overlay和dtc命令【转】
本文转载自:https://blog.csdn.net/wyt2013/article/details/16846171 本文是我早期写的,语言略混乱.请直接看我最新整理的,适用于初学者的文章< ...
- 第五章 搭建S3C6410开发板的测试环境
在PC上可以开发Linux驱动,重新编译成ARM架构的Linux驱动模块,但最后还是要在开发板上进行测试.目前最流行的是基于三星S3C6410 ARM11架构的开发板,很多厂商在其基础上进行了扩展,开 ...
- 使用IOCTL代码实现LCD背光调节
国内这种代码找不到.于是參考了相关代码后完好例如以下代码,且实现方式通过IOCTL代码实现LCD背光调节的功能. 适合场合为平板电脑或者笔记本.主要还是要靠BIOS支持与否. 编译环境使用:Dev-c ...
- msm8610 lcd driver code analysis
---恢复内容开始--- 1 lcd probe The probe sequence is determined by compilation sequence: mdss-mdp3-objs = ...
- LCD framebuffer驱动设计文档
内容提要:1. android display相关的名词2. 调试LCD驱动需要注意的步骤3. 关于帧缓冲区及I/O内存---------------------------------------- ...
- S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件制作)
本文主要讲怎用利用yaffs2工具和busybox制作yaffs2文件系统镜像.大多数都是参照网上的,目的在于记录学习,不做任何用途. 一.制作mkyaffs2image工具 进入yaffs2源码目录 ...
随机推荐
- acgis地图初始化并根据经纬度进行标注
根据项目要求,需要对指定的位置进行标注. 1.初始化地图服务 2.根据地图服务接口信息进行标注 3.根据经纬度信息进行标注 展示接口截图: 以下代码并不能直接粘贴跑起来,因为代码所涉及的文件地址都是内 ...
- C#--文件操作的一些技巧
Using的特点 Using 打开什么,就自动关闭什么,using中包含的其他类是否关闭,using是不管的 XML文档读取 重点:必须是标准的xml文档,否则会出错 string xmlxx = @ ...
- rabbitMQ学习笔记(三) 消息确认与公平调度消费者
从本节开始称Sender为生产者 , Recv为消费者 一.消息确认 为了确保消息一定被消费者处理,rabbitMQ提供了消息确认功能,就是在消费者处理完任务之后,就给服务器一个回馈,服务器就会将 ...
- ZOJ 3203
很简单的一题,注意墙上的影子是放大就行.用三分. #include <iostream> #include <cstdio> #include <cstring> ...
- JAVAEE之--------过滤器设置是否缓存(Filter)
在网页中.每次的client訪问server.有部分不用反复请求.如有些图片,视频等就没有必要每次都请求,这样会让server增大工作量.为了防止这样.我们採用过滤器来设置client是都缓存. 參考 ...
- 不做Next,争做Nest——庆科首届智能硬件创新设计大赛产生决赛12强
智能硬件,Wi-Fi互联,谁是下一个Nest?邀你共见证! 2014年3月到7月.由上海庆科信息技术有限公司主办的首届 MXCHIP 智能硬件创新设计大赛--"寻找下一个nest&quo ...
- 微信小程序 多图上传解决方案
为了使代码体积小 我这里将多图上传 封装到单独的一个js 页面的js调用他 我们看firhealth.js文件内容 // pages/home/home.js var upload = requir ...
- Oracle新建Schema
1.首先,创建(新)用户: create user username identified by password; username:新用户名的用户名 password: 新用户的密码也可以不创建新 ...
- tp中使用事务
是什么 事务是为了防止,多个操作,其中有失败,数据有部分被执行成功的时候使用的. 比如,银行,用户转账.张三钱扣了,结果李四钱还增加! 这个时候需要使用事务,确保张三钱扣了,李四的钱也增加,才真正的成 ...
- 英语发音规则---B字母
英语发音规则---B字母 一.总结 一句话总结: 1.B发[b]音? bike [baɪk] n. 自行车 bus [bʌs] n. 公共汽车 bag [bæg] n. 袋:猎获物 baby ['be ...