当前位置:  技术问答>linux和unix

arm-pxa270 矩阵键盘驱动程序的疑问~请帮我看看哦~急!!

    来源: 互联网  发布时间:2015-12-12

    本文导语:  我开学升大三拉~今天接到任务老师让我注释arm-pxa270 的4*4 矩阵键盘的驱动 有些部分我看不大明白 尤其是扫描算fa部分 源程序用的是查询式方fa取得键状态的变化 扫描时用的大概是行扫描算fa; 但那些if我就基本上...

我开学升大三拉~今天接到任务老师让我注释arm-pxa270 的4*4 矩阵键盘的驱动
有些部分我看不大明白 尤其是扫描算fa部分
源程序用的是查询式方fa取得键状态的变化
扫描时用的大概是行扫描算fa;
但那些if我就基本上不明白。。。
可怜我mei学过接口。。。
请各位大虾帮我看看哦~谢谢啦~我对着这群东西已经一天了。。。

static unsigned char get_scancode(struct kp_event *kpe)//从缓冲区取出键值
{
static unsigned int curr, prev=ROTARY_DEFAULT;
unsigned int c;

c = NO_KEY;

if (kpe->flags & KP_DIRECT) {  //#define KP_DIRECT  0x1

curr = kpe->rotary & 0xFF;

if (kpe->rotary & KPREC_OF0) { //#define KPREC_OF0 (0x1 matrix[0] >> 26) & 0x1f;

c = kpe->matrix[0] & 0xff;

/* key up */
if (!count) c |= 0x80; 
}

return c;
}

static ssize_t kpdrv_read(struct file * filp, char * buf,
size_t count, loff_t *ppos)//keypad读取操作接口函数
{
struct kp_event kpe;
int err,left,timeout;
unsigned char c;

timeout = 0;
left  = count;
do {
err = kp_wait(&kpe, timeout);//一个等待队列
if (err) {
if ( left != count ) return (count-left);

if (filp->f_flags & O_NONBLOCK) return err;

if (timeout) return err;

timeout = -1;
continue;
}

/* parse if direct/matrix flags are set*/
if ( (kpe.flags & KP_DIRECT) || (kpe.flags & KP_MATRIX) ) {//#define KP_DIRECT  0x1
//#define KP_MATRIX 0x2
c = get_scancode(&kpe);//读缓冲区数据
if (c != NO_KEY) {
put_user(c, buf++);//放到用户数据区
left --;
}
}
} while (left);

return (count-left);
}

|
/* parse if direct/matrix flags are set*/ 
if ((kpe.flags & KP_DIRECT) || (kpe.flags & KP_MATRIX))
很明显呀,判断第0位或第1位是否置1

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3