关于pwm beeper驱动的疑问

zhang19871112 2012-05-28 04:40:45
各位大侠,小弟最近实现一个pwm控制的蜂鸣器,在内核代码中搜到了pwm-beeper.c这个驱动,在drivers/input/misc下,大概看了一下具体让蜂鸣器发生的操作放在了input_dev->event这个回调函数里面,我移植相关代码之后,在/dev/input/下出现了event0这个输入设备,但是我不知道如何在上层触发回调这个函数,找了input.h中的相关ioctl,没有头绪,希望调试过的大侠给予帮助,谢谢!!
...全文
389 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
额...来晚了..搞定就好..
zhang19871112 2012-05-29
  • 打赏
  • 举报
回复
居然没贴全:


#include <stdint.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <linux/input.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
int fd, version, ret;
struct input_event event;
struct timeval time;

if ((fd = open("/dev/input/event0", O_RDWR)) < 0) {
perror("beep test");
return 1;
}

event.type = EV_SND;
event.code = SND_BELL;
event.value = 2000;
time.tv_sec = 1;
time.tv_usec = 0;

event.time = time;
ret = write(fd, &event, sizeof(struct input_event));
close(fd);
}

zhang19871112 2012-05-29
  • 打赏
  • 举报
回复
自己结个贴,底层移植完pwm-beeper.c驱动之后,上层只需要open,然后:

int fd, version, ret;
struct input_event event;
struct timeval time;

if ((fd = open("/dev/input/event0", O_RDWR)) < 0) {
perror("beep test");
return 1;
}

if (ioctl(fd, EVIOCGVERSION, &version)) {
perror("beep test, can't get version");
return 1;
}

printf("Input driver version is %d.%d.%d\n",
version >> 16, (version >> 8) & 0xff, version & 0xff);

event.type = EV_SND;
event.code = SND_BELL;
event.value = 2000;
time.tv_sec = 1;
time.tv_usec = 0;

event.time = time;
ret = write(fd, &event, sizeof(struct input_event));

就可以回调到input_dev->event函数了
zhang19871112 2012-05-29
  • 打赏
  • 举报
回复
恩,是linux系统,昨天看kernel看了5分钟就知道怎么弄了,看来还是要自己多多静下心来看代码
[Quote=引用 1 楼 的回复:]

多多阅读你的代码吧。你这是linux系统吧?好久没搞了,现在搞的是wince。
[/Quote]
zhengmeifu 2012-05-29
  • 打赏
  • 举报
回复
多多阅读你的代码吧。你这是linux系统吧?好久没搞了,现在搞的是wince。

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧