Linux驱动开发_Tslib库安装与运用

举报
DS小龙哥 发表于 2022/04/29 00:07:52 2022/04/29
【摘要】 分析tslib库的接口、编写tslib库的测试代码,完成XY坐标读取。

任务1: Tslib库安装与运用

Tslib库运用

 编译的步骤:

1.​ 解压…….

2.​ 生成配置文件: [root@wbyq tslib-master]# ./autogen.sh

3.​ 生成Makefile:

[root@wbyq tslib-master]# ./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=$PWD/tslib

4.​ 编译并安装

[root@wbyq tslib-master]# make && make install

5.​ 并将编译好的文件拷贝到开发板对应目录下

6.​ 修改etc/ts.conf文件 ,将第2行注释去掉,删除多余的空格(顶格)

7.​ 拷贝ts插件目录到开发板上

8.​ 设置tslib使用的环境变量


安装rpm后缀的安装包:

[root@wbyq Packages]# rpm -ivh <包名称>.rpm


数码相册功能:

1.​ 支持两种格式图片显示: bmp、jpg

区分两种图片格式,通过后缀名称区分。

2.​ 支持触摸屏、按键方式翻页(支持前后翻页)

建立双向链表,调用读取目录的函数(opendir),将目录下所有符合要求的图片加入到链表里。

3.​ 支持三轴加速度计,实现姿态感应。根据三轴加速度的姿态,调整图片的显示方向。

4.​ 支持图片的自适应: 居中显示,超大尺寸的图片需要自动缩小到屏幕能够显示的大小。

居中显示:

5.​ 数码相册需要有状态栏: 当前系统的时间信息,当前图片的名称、数量。

需要使用多线程编程。


任务2: 时间处理函数学习

系统时间设置:

[root@tiny4412 ]#date //当前系统时间

Fri May 23 01:37:23 UTC 2008


[root@tiny4412 ]#date -s "2018-12-7 15:10:20"

Fri Dec 7 15:10:20 UTC 2018

查看RTC时间 (RTC子系统)

[root@tiny4412 ]#cat /proc/driver/rtc

rtc_time : 12:44:41

rtc_date : 2016-01-01

alrm_time : 00:00:00

alrm_date : 1970-01-01

alarm_IRQ : no

alrm_pending : no

update IRQ enabled : no

periodic IRQ enabled : no

periodic IRQ frequency : 1

max user IRQ frequency : 32768

24hr : yes

periodic_IRQ : no



[root@tiny4412 ]#hwclock //读取RTC实时时钟的时间

Fri Jan 1 12:45:32 2016 0.000000 seconds


[root@tiny4412 ]#hwclock -s //同步RTC实时时钟的时间给系统时间。


[root@tiny4412 ]#hwclock -w //将系统时间写入RTC实时时钟(设置RTC实时时钟的时间)

学习一些时间处理函数

#include <stdio.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <sys/ioctl.h>

#include <linux/fb.h>

#include <sys/ioctl.h>

#include <sys/mman.h>

#include <string.h>

#include <time.h>


#if 0

struct tm {

int tm_sec; /* seconds */

int tm_min; /* minutes */

int tm_hour; /* hours */

int tm_mday; /* day of the month */

int tm_mon; /* month */

int tm_year; /* year */

int tm_wday; /* day of the week */

int tm_yday; /* day in the year */

int tm_isdst; /* daylight saving time */

};

#endif


int main(int argc,char **argv)

{

/*获取本地秒单位时间*/

time_t sec_time=time(NULL);


/*使用时间函数将秒单位时间转为标准时间返回*/

struct tm *system_time=localtime(&sec_time);

printf("%d-%d-%d %d:%d:%d\n",system_time->tm_year+1900,

system_time->tm_mon+1,

system_time->tm_mday,

system_time->tm_hour,

system_time->tm_min,

system_time->tm_sec);

return 0;

}



tslib库的使用示例:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <poll.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/input.h>
#include <tslib.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
	if(argc!=2)
	{
		printf("./app </dev/input/eventX>\n");
		return 0;
	}
	
	/*1. 调用tslib库函数: 打开触摸屏设备节点*/
	struct tsdev *ts;
	ts=ts_open(argv[1],0);
	if(!ts) 
	{
		perror("ts_open"); 
		exit(1);
	}
	
	/*2. 调用tslib库函数:初始化tslib配置文件*/
	if(ts_config(ts)) 
	{
		perror("ts_config");
		exit(1);
	}
	
	struct ts_sample samp; //tslib库定义的结构体,保存了读取的坐标和压力值信息
	while(1)
	{
		 /*3. 调用tslib库函数:读取触摸屏的数据*/
		ts_read(ts,&samp,1); 
		
		/*4.打印读取的坐标值*/
		printf("s=%ld,us=%ld:x=%d y=%d pressure=%d\n", samp.tv.tv_sec, samp.tv.tv_usec,
			samp.x, samp.y, samp.pressure);
	}
	
	/*5. 调用tslib库函数:关闭触摸屏设备*/
	ts_close(ts);
	return 0;
}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。