s3c2440 LCD之按键控制截屏与保存

明月楼高休独倚,酒入愁肠,化作相思泪。——范仲淹《苏幕遮》


最近被这个第三方源软件的安装和Makefile搞得不要不要的,不过还好,正当我头疼的时候,得到了高人指导,下面来谈谈吧。


我们板子LCD的功能实在太多了,不过光是显示一些颜色,画一些图形之类的,没有什么实际应用,只是图个好玩,于是我就学习了一下这个LCD的截图软件,用来截屏,并清晰显示在我们的windows下。下面就来说说我们的流程。


专用的framebuffer截图软件fbgrab需要两个必须库的依赖:

libpng库:http://linux.softpedia.com/get/Programming/Libraries/libpng-167.shtml

zlib库:http://www.zlib.net/


这两个库的安装流程都是和第三方的一样,有Makefile直接make,然后make install。没有的话先 .configure。

然后就是我们的抓图软件fbgrab:

fbgrab:https://fbgrab.monells.se/

下载完成后按照步骤安装并用我们的交叉编译器编译我们的fbgrab,当然,我们得在Makefile中添加我们交叉编译器的路径:gcc=xxxxxxxxx。


这些都做完了以后我们得添加framebuffer对我们fbgrab的支持:


$vim /opt/buildroot-2012.08/boot/grub/menu.lst

在kernel这一行最后添加 vga=0x0317 。然后重新编译我们的内核,烧录开发板中,再将我们的fbgrab传入开发板并给可执行权限。最后运行

./fbgrab xxx.png 即可生成一张.png格式的图片,即当前你的LCD的画面,而framebuffer自带的命令cp xxx > /dev/fb0只能截图,却不能将其转化为我们计算机能识别的图片格式,所以,我们不得不使用fbgrab这个简单实用的软件。

既然实现了截图,那我们可以结合我们的按键驱动,做一个按键截屏并发送到windows下的功能,下面给出代码:

#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/fb.h>
#include <sys/mman.h>


#define KEY1 0x01
#define KEY2 0x02
#define KEY3 0x04
#define KEY4 0x08
#define PLATDRV_MAGIC   0x60
#define OFF _IO (PLATDRV_MAGIC,0x18)
#define ON _IO (PLATDRV_MAGIC,0X19)




int main (int argc, char **argv)
{
    int button_fd;
    int ret_button;
    int current_button;
	
       

    button_fd = open("/dev/button", 0);
    
    

    if (button_fd < 0)
    {
        printf("open button failed.\n");
        exit(1);
    }
	
	while (1)
    {
        ret_button = read(button_fd, ¤t_button, sizeof(4));
        if (ret_button != sizeof(current_button))
        {
            printf("Read() button failed.\n");
        }
		
		else
		{
		    if (current_button == KEY1)
			{ 
                
		        system("./fbgrab 123.png");
                
            }
			
			else if (current_button == KEY2)
			{
                
				system("tftp -pr 123.png 192.168.1.8");
			
			}
			
				
	
		
	
	}
	
    close(button_fd);
	return 0;
}

按键驱动前面已经谈到过,这里的system函数简单明了,直接执行命令,当然,如果你的/bin目录下添加了fbgrab这个命令,前面的“./”就没必要加了。上一篇提到过execl函数,这个函数的使用必须配合fork,所以代码会很繁杂,而system函数会自己创建一个进程,将他封装起来去做其他的事情,因此这里用到的是system,代码很简单,安装好按键驱动,然后执行测试程序,按下按键1,截屏,按键2,发送到我们的Windows下,这里的地址还是我们的服务器ip。

这里切记,最好在/bin下添加我们的命令,不然后果很严重。

如果有再需要改进的地方,望大家给出建议。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值