说明:我用的tslib版本是1.4,android基于eclair。
1. http://blog.csdn.net/jiajie961/archive/2010/11/11/6003384.aspx //touch driver修改
http://blog.csdn.net/jiajie961/archive/2010/11/12/6005488.aspx //tslib移植
2. tslib/src目录下创建Mdroid.mk,注意把 ts_option.c 从 LOCAL_SRC_FILES 中去掉。
3. tslib/tests的 Mdroid.mk里,加入ts_test编译选项(http://blog.chinaunix.net/u3/93670/showart_2100120.html):
#
# ts_test
#
include $(CLEAR_VARS)
LOCAL_SRC_FILES := ts_test.c testutils.c fbutils.c font_8x8.c font_8x16.c
LOCAL_C_INCLUDES += /
$(LOCAL_PATH)/../ /
$(LOCAL_PATH)/../src
LOCAL_SHARED_LIBRARIES := libts
LOCAL_MODULE := ts_test
include $(BUILD_EXECUTABLE)
4. tslib/etc/ts.conf中打开:
module_raw input1
input有时会和系统中已有的input module重名,改个名字即可。
5. tslib/src/ts_open.c中的 #include <sys/fcntl.h> 改成 #include <fcntl.h>
6. tslib/tests/fbuils.c中的 *defaultfbdevice = "/dev/fb0" 改成 *defaultfbdevice = "/dev/graphics/fb0"
7. tslib/tests/ts_calibrate.c中,增加代码,校准后写参数到文件 /proc/sys/dev/ts_device/a0~a7,注意顺序必须为 /etc/pointercal 中存储的顺序。
8. tslib/tests/ts_tests.c中,打开触摸屏设备代码改为: ts = ts_open("/dev/input/event1", 0);
9. touch 驱动中加文件ts_linear.c,校准算法在其中实现。
10. touch驱动中调用ts_linear_scale(&x, &y, invert),校准坐标。注意 有符号数和无符号数 之间的赋值。
11. 校准之后的坐标值在 [x_res, y_res]区间,相应的需要重设坐标的最大值: input_set_abs_params(input_dev, ABS_X, 0, 800, 0, 0);
问题:
1. getenv 不工作,因为声明加在了/system/core/rootdir/init.rc, 而这个文件只有在target没有自己的init.rc时才被使用。如其Android.mk中所示:
# Only copy init.rc if the target doesn't have its own.
ifneq ($(TARGET_PROVIDES_INIT_RC),true)
file := $(TARGET_ROOT_OUT)/init.rc
$(file) : $(LOCAL_PATH)/init.rc | $(ACP)
$(transform-prebuilt-to-target)
ALL_PREBUILT += $(file)
endif
2. touch panel等input设备对应的设备号,在evdev.c中可以打印出来:
static int evdev_connect(...)
{
snprintf(evdev->name, sizeof(evdev->name), "event%d", minor);
printk(KERN_ERR "evdev.c %s: event%d/n", dev->name, minor);
}