cuijpus的专栏

关注范围:Telecommunication, Mobile , Embedded Linux。好记性,不如烂笔头。

用户操作
[即时聊天] [发私信] [加为好友]
崔计平ID:cuijpus
51279次访问,排名2233(-1),好友22人,关注者49人。
做手机研发5年多,涉及app, middleware, driver等;好记性不如烂笔头,随手写些,免得忘记了。
cuijpus的文章
原创 155 篇
翻译 0 篇
转载 47 篇
评论 56 篇
cuijpus的公告
目前正在分析研究7个Linux手机平台的异同点


最近评论
qiuyu:您好,我想问一下是不是第三方开发只需LiMo的应用程序编程接口,在此基础上编程就可以了?我看了一下我得linux平台下并没有这个API的实现程序,这样的话只根据接口函数就能使用?一般情况下的话是不是得需要个库之类的文件呀?我是新手,请赐教!
yuhang111:我想还是兼容性的问题,maemo的不少组件是基于debian开发的, 所有应该更方便的在ubuntu上使用吧。当然用fedora也可以,好像虚拟机下用fedora要比ubuntu慢些吧。
wei04:请问D-BUS的C API是线程安全的么?
Liyonn8744:您好,Maemo平台的宿主Linux一定要用ubuntu的吗?用Fedora Core 6可以吗?有什么区别呢?谢谢~
SearchSun:同期待,如果有一个通过libosso封装的D-BUS来调用media player的例子就好了
文章分类
收藏
相册
常去的网站
linux mobile research圈子
存档
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 如何在嵌入式Linux产品中做立体、覆盖产品生命期的调试 ( 4 )收藏

新一篇: GPE Phone Edition, 这个Linux手机平台重点是提供一些重要的framework | 旧一篇: LiMo手机平台的6家分工

 
上接:如何在嵌入式Linux产品中做立体、覆盖产品生命期的调试 ( 3)
 
这篇谈谈抓屏(screenshot)的做法:
所谓抓屏:就是把出现问题时界面的情况抓下来,可以抓模拟器,LCD或者terminal的屏幕;抓屏比较适合于产品使用期,这时候开发人员看不当时的情况,如果出现问题,把屏幕抓下来,对于事后分析问题很有帮助
       下面的抓屏函数,你可以它拷贝到你的模块中编译,然后调用即可;如果想在一个项目中统一使用,就把它编译成一个可执行文件,放到你们程序能找到的地方,比如/usr/bin等处,项目中的各个模块都可以使用了;
 
1 抓屏函数
 
#include <gtk/gtkmain.h>
 
//抓屏函数
static gboolean
screenshot (const char *filename, GError **error)
{
 GdkDrawable *root_window;
 int          width, height;
 GdkPixbuf   *pixbuf;
 gboolean     ret;
 
 root_window = gdk_get_default_root_window ();
 gdk_drawable_get_size (root_window, &width, &height);
 
 pixbuf = gdk_pixbuf_get_from_drawable (NULL,
                                                                             root_window,
                                                                             gdk_drawable_get_colormap (root_window),
                                                                             0, 0,
                                                                             0, 0,
                                                                             width, height);
 
 ret = gdk_pixbuf_save (pixbuf, filename, "png", error, NULL);
 g_object_unref (pixbuf);
 
 return ret;
}
 
//把抓屏函数编译成抓屏工具:可执行文件,
int
main (int argc, char **argv)
{
 const char *filename;
 GError     *error = NULL;
 
 gtk_init (&argc, &argv);
 
 if (argc != 2)
    {
      g_printerr ("Usage: %s filename.png\n", g_get_prgname ());
      return 1;
    }
 filename = argv[1];
 
 if (screenshot (filename, &error))
    return 0;
 
 g_printerr ("%s: %s\n", g_get_prgname (), error->message);
 g_error_free (error);
 return 1;
}
 
2 makefile
//根据项目的不同配置,你可以修改这个prefix
prefix = /usr
bindir = $(prefix)/bin
 
CC ?= gcc
CFLAGS ?= -Wall -O2 -g
CFLAGS += $(GTK_CFLAGS)
LDLIBS += $(GTK_LIBS)
 
GTK_CFLAGS := $(shell pkg-config --cflags gtk+-2.0)
GTK_LIBS := $(shell pkg-config --libs gtk+-2.0)
 
all: screenshot-tool
 
clean:
               rm -f screenshot-tool
 
install: screenshot-tool
               install -m755 -d $(DESTDIR)$(bindir)
               install -m755 screenshot-tool $(DESTDIR)$(bindir)/
 
distclean: clean
 
.PHONY: all clean distclean install
 
3 如何使用:
 
3-1: 如果把抓屏函数放到你的文件中一块编译,可以直接调用函数
 
void test_func1 (void)
{
    //...
    GError *error = NULL;
    screenshot (“test.png”, &error);
    //…
}
 
3-2: 如果把抓屏函数编译成可执行文件,放到了/usr/bin/目录下,项目中的模块可以这样用:
 
void test_func2 (void)
{
    //...
    char cmd[128] = {0};
    sprintf(cmd, "%s  %s", “usr/bin/screenshot-tool”, “test.png”);
    system(cmd);
    //…
}
 
第二种方法比较通用点。
 
当然,你也不能老用这个工具,结果抓了很多图片,很好,当心空间的问题啊,呵呵,别把空间给用光了;
 
如果考虑空间的话,可以给这个工具升级一下,判断当前flash剩余多少空间,如果小于预留的空间,就不保存了,这样会避开空间问题。
 

发表于 @ 2007年12月26日 13:19:00|评论(loading...)|编辑

新一篇: GPE Phone Edition, 这个Linux手机平台重点是提供一些重要的framework | 旧一篇: LiMo手机平台的6家分工

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © cuijpus