Linux驱动开发_Tslib库安装与运用
任务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;
}
- 点赞
- 收藏
- 关注作者
评论(0)