科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道通过振动向Linux ThinkPad传输信息(3)

通过振动向Linux ThinkPad传输信息(3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

通过修改内核以在受震动导致内核出现紧急情况时自动重置 Linux 膝上型计算机,让您的计算机处于受保护的状态

作者:Nathan Harrington 来源:IBM 2007年9月10日

关键字: 传输 Thinkpad Linux

  • 评论
  • 分享微博
  • 分享邮件
 

需要特别注意的是偏差阈值参数和空间移位参数。这些参数可能需要根据尝试检测的动作的独特性质做出调整。例如,如果感觉迫切需要像完成篮球传球动作一样震动计算机,可尝试减少 dimShiftX 参数以更轻松地检测垂直于计算机屏幕的动作。反过来,如果震动脉冲触发剧烈的锯齿状动作,则考虑减少 dimShiftY 参数,以便快速地检测平行于屏幕的震动并在发生进一步的损害之前重置计算机。

空间参数选择 150 及总偏差选择 4000 都旨在检测一般用户的典型震动动作。要立即响应输入,请尝试将空间移位参数减少到 10 或更少,并将总偏差参数减少到 10 或更少。这些值将导致其他类型的输入被立即识别出来,例如猛击键盘或拍打显示器外壳。

接下来,考虑无限循环语句和条件。

while(1) 
{  
ret = hdaps_read_pair(HDAPS_PORT_XPOS, HDAPS_PORT_YPOS, &x, &y);  
if (!ret)  {   if( x != 0 && y != 0 )   
{    
// if its a successful read and not a zero read    
if( baseX == -5000 )    
{     baseX = x;     
baseY = y;    
}

清单 4. panicShake hdaps 读取和基本设置

代码运行如下:其余时间里,从 Hdaps 传感器中读取当前加速度传感器读数。读数经常是不成功的或者两个值都等于 0,0,这是不能用的数据。需要避免这些虚假的 0,0 读数,来自传感器各个方向上的每 10 个读数中就会有一个读数是 0,0 —— 无效的数据,确实如此。如果是首次成功读取,则将基本参数设为第一个 x 值和 y 值。如果计算机被放在不平的表面(例如人的膝盖上)时发生紧急情况,这将允许我们更有力地检测震动或其他动作。

子程序的其余部分实现简单的震动检测算法。

if( abs(baseX - x) > dimShiftX || abs(baseY - y) > dimShiftY )    
{     
totalDev += abs(baseX - x);     
totalDev += abs(baseY - y);     
baseX = x;     baseY = y;    
}    
if( totalDev > devThreshold )    
{     printk(KERN_EMERG 
"ok, ok! you're shaking my substrate - restarting");     
emergency_restart();    }   
}//if not a zero value  
}//if successful read of hdaps data 
}//infinite while

清单 5. panicShake 震动检测
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章