tslib学习

写在前边

本文是B站up主韦东山的4_7-9.编写基于tslib的测试程序_哔哩哔哩_bilibili视频的笔记,其中有些部分博主也没有理解,希望各位辩证的看。

目录

基本知识

交叉编译、测试 tslib

示例程序


基本知识

tslib 是一个触摸屏的开源库,可以使用它来访问触摸屏设备,可以给输入设 备 添 加 各 种 “ filter ” ( 过 滤 器 , 就 是 各 种 处 理 ) , 地 址 是 :http://www.tslib.org/。

编译 tslib 后,可以得到 libts 库,还可以得到各种工具:较准工具、测试工具。

官网地址:C library for filtering touchscreen events

tslib 框架分析

tslib 的主要代码位置

tslib 1主要代码

plugins目录下的每个文件都是一个 module,每个模块都会被编译成动态库,每个 module 都提供 2 个函数:read、read_mt,前者用于读取单点触摸屏的数据,后者用于读取多点触摸屏的数据。

tests目录下是测试程序:参考 ts_test.c 和ts_test_mt.c,前者用于一般触摸屏(比如电阻屏、单点电容屏),后者用于多点触摸屏。

tslib 2tslib框架图

交叉编译、测试 tslib

首先先安装依赖库

sudo apt-get install autoconf automake libtool

然后需要根据自己板子的交叉编译工具链安装:

其中arm-linux-gnueabihf就是你的交叉编译工具链,你需要根据自己的工具链将这里进行替换。

./configure --host=arm-linux-gnueabihf --prefix=/

make

make install DESTDIR=$PWD/tmp

这里完成后会在当前文件夹下产生tslib的各种文件,接下来需要将某些文件加入到工具链的目录中,以便程序在编译时可以找到这些库函数。

这里需要做的是先知道这些工具链的目录在哪里:

echo 'main(){}'| arm-linux-gnueabihf-gcc -E -v -

同样的,arm-linux-gnueabihf是交叉编译工具链,将这里替换成自己的工具链。

tslib 3工具链目录

// 下边的这些命令我直接复制的百问的命令,所以这里边的工具链和我标出的不太一样,这里需按照自己的板子上的工具链进行替换。

cd tslib-1.21/tmp/

cp include/* /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include

cp -d lib/*so* /home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/lib/

这些完成之后,需要将库文件放到板子上运行(这里我提前挂载了网络文件系统):

cp /mnt/tslib-1.21/tmp/lib/*so* -d /lib

cp /mnt/tslib-1.21/tmp/bin/* /bin

cp /mnt/tslib-1.21/tmp/etc/ts.conf -d /etc

完成之后就可以在板子上运行tslib库了。

示例程序

下边是我做的一个画板程序,主要功能为可以在上边画线,点击上边颜色部分可以切换画线颜色。

tslib 4画板实物

#include <stdio.h>

#include <stdint.h>

#include <stdlib.h>

#include <string.h>

#include <signal.h>

#include <errno.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <unistd.h>

#include <getopt.h>

#include <linux/input.h>

#include <sys/ioctl.h>

#include <tslib.h>

#include <sys/mman.h>

#include <linux/fb.h>



// 可变参数结构体

static struct fb_var_screeninfo var; /* current var */

// 屏幕文件的句柄

static int fd_fb;

// 整个屏幕的像素个数

static int screen_size;

// 指向映射的区域指针

static unsigned char* fb_base;

// 一行有多少像素

static unsigned int line_width;

// 一个像素多少byte

static unsigned int pixel_width;

// 定义颜色

unsigned int color = 0;



// 描点函数(color格式:0x00RRGGBB)

void lcd_put_pixel(int x, int y, unsigned int color)

{

         unsigned char* pen_8 = fb_base + y * line_width + x * pixel_width;

         unsigned short* pen_16;

         unsigned int* pen_32;



         unsigned int red, green, blue;



         pen_16 = (unsigned short*)pen_8;

         pen_32 = (unsigned int*)pen_8;



         switch (var.bits_per_pixel) { /* bpp 像素深度 */

         case 8:

         {

                   *pen_8 = color;

                   break;

&nbs
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值