注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 操作系统 > Linux 内容正文:解析Linux笔记本基于“敲打”的命令

解析Linux笔记本基于“敲打”的命令

发布时间:2006-09-27 10:53:01 来源:IBM中国 网友评论 0 条
readPosition 子程序中,我们可以看到他的注释。这个子程序将打开一个文件,从中读取当前的加速器数据,然后关闭文件,并返回不包含 “,(逗号)” 字符的数据。

  清单 4. readPosition subroutine

#
# comments from Jeff Molofee in hdaps-gl.c
#* read_position - read the (x,y) position pair from hdaps.
#*
#* We open and close the file on every invocation, which is lame but due to
#* several features of sysfs files:
#*
#* (a) Sysfs files are seekable.
#* (b) Seeking to zero and then rereading does not seem to work.
#
# sub readPosition() { my ($posX, $posY) = ""; my $fd = open(FH," $hdapsFN");
while( <FH> ){ s//(//g; s//)//g; ($posX, $posY) = split ","; }
# while read close(FH); return( $posX, $posY ); }#readPosition

  getEpochSeconds 和 getEpochMicroSeconds 提供了有关敲打模式状态的详细而精确的信息。

  清单 5. 时间分隔器

sub getEpochMicroSeconds {   my $TIMEVAL_T = "LL";      
# LL for microseconds my $timeVal = pack($TIMEVAL_T, ());
syscall(&SYS_gettimeofday, $timeVal, 0) != -1 or die "micro seconds: $!";
my @vals = unpack( $TIMEVAL_T, $timeVal ); $timeVal = $vals[0] . $vals[1];
$timeVal = substr( $timeVal, 6); my $padLen = 10 - length($timeVal);
$timeVal = $timeVal . "0" x $padLen; return($timeVal); }
#getEpochMicroSeconds sub getEpochSeconds { my $TIMEVAL_T = "LL";
# LL for microseconds my $start = pack($TIMEVAL_T, ());
syscall(&SYS_gettimeofday, $start, 0) != -1 or die "seconds: $!";
return( (unpack($TIMEVAL_T, $start))[0] ); }#getEpochSeconds

  接下来是 knockListen 子程序,前 5 行负责读取当前的加速器数据值,并对基本的值读取进行调整。如果加速器的数量在某一维度上大于更新上限值,那么 checkKnock 变量就被设置为 1。为了调整这个程序,使它只响应我们需要的敲打事件或类似的加速值,我们需要扩大更新上限。例如,我们可以将 ThinkPad 放到自己的汽车中,并让它在检测到硬加速(或减速)时更改 MP3 播放列表。
  如果敲打笔记本的力度足够大,并且大于了更新上限,那么就会导致调用 getEpochMicroSeconds 子程序。然后 diffInterval 变量会在两次敲打事件之间被赋值。这个值将很多击打力度大于更新上限的很多快速加速读取压缩到一个时间中。如果没有间隔上限检查,一次硬敲打就会被注册成很多事件,就仿佛是加速器连续一段时间产生大量事件一样。这种行为对于用户的视力和触觉来说都是无法感知到的,但对于 HDAPS 来说显然并非如此。如果已经达到了间隔上限,那么敲打间隔会被记录在 baseKnocks 数组中,然后将两次敲打之间的间隔重置。

  仔细修改这些变量可以帮助对程序进行优化,从而识别出您特有的敲打风格。缩小更新上限并扩大周期上限可以检测出更多间隔的轻微敲打。机械敲打设备或特定的敲打方法可能会需要降低间隔上限,从而识别出独特的敲打事件。

  清单 6. knockListen 子程序

sub knockListen() {   my $checkKnock = 0;   ($currX, $currY) = readPosition();
$currX -= $restX;
# adjust for rest data state $currY -= $restY;
# adjust for rest data state
# require a high threshold of acceleration to ignore non-events like
# bashing the enter key or hitting the side with the mouse
if( abs ($currX) > $UPDATE_THRESHOLD) { $checkKnock = 1; }
if( abs ($currY) > $UPDATE_THRESHOLD) { $checkKnock = 1; }
if( $checkKnock == 1 ){ my $currVal = getEpochMicroSeconds();
my $diffInterval = abs($prevInterval - $currVal);
# hard knock events can create continuous acceleration across a large time
# threshold. requiring an elapsed time between knock events effectively
# reduces what appear as multiple events according to sleep_interval and
# update_threshold into a singular event. if( $diffInterval > $INTERVAL_THRESHOLD )
{ if( $knockCount == 0 ){ $diffInterval = 0 } if( $option ){
print "Knock: $knockCount
#
# last: [$currVal] curr: [$prevInterval] ";
print "difference is: $diffInterval/n";
} push @baseKnocks, $diffInterval; $knockCount++; }
# if the difference interval is greater than the threshold $prevInterval = $currVal; }
#if checkknock passed }#knockListen

  在创建敲打模式时,该模式会被放入 ~/.knockFile 文件中,并使用下面的子程序进行读取:

 4/6   |‹ ‹‹ 2 3 4 5 6 ›› ›|
相关文章
  • 嵌入式Linux平台的多协议路由器的设计
  • 挖掘Linux操作系统堆内存释放的奥秘
  • Linux系统下X终端的详细使用方法
  • 如何在Linux/FreeBSD下玩模拟器游戏
【评论】【收藏本文】【打印】【关闭】
上一篇文章:Linux防火墙配置入门必学
下一篇文章:嵌入式Linux平台的多协议路由器的设计
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
Linux操作系统文件系统的桌面应用
Linux操作系统文件系统的桌面应用
Linux设备驱动编程之定时器
Linux设备驱动编程之定时器
Windows外衣Linux心 红旗桌面版详测
Windows外衣Linux心 红旗桌面版详测
超实用 Linux下通过VNC安装Oracle
超实用 Linux下通过VNC安装Oracle
推荐阅讯
  • Linux操作系统下运行命令时CTRL+Z的作用
  • RAYS LX 1.5入围LinuxWorld优秀产品奖
  • 微软染指集群计算 放言干掉Linux
  • 解析Linux笔记本基于“敲打”的命令
  • 冤家和睦:Linux和Windows双重系统搭建
  • 桌面Linux标准出炉 学习Windows兼容性
  • 如何在Linux系统环境下使用USB存储器
  • 在Linux操作系统中实现内部进程通信
  • 强强联合 让Linux用起来跟Windows无异
  • 自己动手做一个迷你Linux系统
阅读排行
  • 1.Windows外衣Linux心 红旗桌面版详测
  • 2.扮酷你的桌面 Linux超靓壁纸下载(多图)
  • 3.Linux安装流程
  • 4.浅谈Linux的内核
  • 5.RedHat Linux9.0安装实例(1)
  • 6.ARM的嵌入式Linux移植体验之基本概念
  • 7.Linux安装要点
  • 8.红旗Linux桌面版5.0BETA版OS
  • 9.如何在大硬盘上安装Linux
  • 10.RealPlayer流媒体播放器Linux版
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载