[韦东山]嵌入式Linux应用开发 lecture10 tslib

tslib是触摸屏的开源库,可以用来访问触摸屏设备;

tslib框架:ts_setup(ts_open/ts_config)---ts_read/ts_read_mt---ts_close

交叉编译tslib

1. 配置工具链:

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin

2. 确认配置文件:

./configyre  --host=arm-buildroot-linux-gnueabihf --prefix=/

3. 编译:

make

make install DESTDIR=$PWD/tmp         (根据报错信息修改)

安装使用tslib

1. 把头文件和库文件放入工具链目录(编译程序需要):

查看默认工具链目录:

echo 'main(){}' | arm-buildroot-linux-gnueabihf-gcc -E -v -
移动头文件:cp include/* 工具链头文件目录

移动库文件:cp lib/*so* -d 工具链库文件目录

(-d 本身为链接文件拷贝后仍保持为链接文件)

2. 把库文件放在单板上(运行程序需要):

cp lib/*so* -d /lib

编写基于tslib的测试程序

int ts_setup(const char * dev_name, int nonblock)

int ts_read_mt(struct tsdev *ts, struct ts_sample_mt **samp, int max_slots, int nr)
 

1. 使用ts_setup打开设备节点:

ts = ts_setup(NULL, 0)

2. 使用ioctl读取节点信息,获得触摸屏的最大点数,根据点数分配指针的指针:

ioctl(ts_fd(ts), EVIOCGABS(ABS_MT_SLOT), &slot) < 0

max_slots = slot.maximum + 1 - slot.minimum

samp_mt = malloc(sizeof(struct ts_sample_mt *));
    if (!samp_mt) {
        ts_close(ts);
        return -ENOMEM;
    }
    samp_mt[0] = calloc(max_slots, sizeof(struct ts_sample_mt));
    if (!samp_mt[0]) {
        free(samp_mt);
        ts_close(ts);
        return -ENOMEM;
    }

3. 使用ts_read_mt读取触摸屏的多点数据:

ret = ts_read_mt(ts, samp_mt, max_slots, 1);

4. 多点数据处理:

保存当前数据:memcpy(&pre_samp_mt[0][i], &samp_mt[0][i], sizeof(struct ts_sample_mt));

计算与前一数据的距离:

distance(&pre_samp_mt[0][point_pressed[0]], &pre_samp_mt[0][point_pressed[1]])

int distance(struct ts_sample_mt *point1, struct ts_sample_mt *point2)
{
    int x = point1->x - point2->x;
    int y = point1->y - point2->y;

    return x*x + y*y;
}

5. 关闭节点:ts_close(ts);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值