Widora-NEO:热插拔自动播放U盘里的MP3 && 识别鼠标 && 用鼠标控制音量

学习了一下Openwrt的热插拔机制,编了个脚本在Widora-NEO上试验,可以实现自动播放U盘中的MP3文件,在播放的时候热插拔一下,居然也OK.
分享一下代码,一般第一个u盘的设备名总是sda, 在/etc/hotplug.d/block目录下建立一个名称为20-usb-storage的脚本文件,内容如下:

 usbdev="sda"
 case "$ACTION" in
     add)
            if [ -b "/dev/$usbdev" ]; then
                    mkdir /mnt/music
                    mount /dev/$usbdev /mnt/music
                    ls /mnt/music/*.mp3 >/mnt/mp3.list
                    screen -dmS MPLAYER mplayer -slave -input file=/mplayer/slave -playlist /mnt/mp3.list
            fi
            ;;
    remove)
            if [ ! -b "/dev/$usbdev" ]; then
                    rm -r /mnt/music
            fi
            ;;
 esac

保存好文件后就会立即生效,可以拿个U盘来试验下。播放器可以根据自己喜好选择, 用mplayer的好处就是可以在slave模式下对其进行各种控制。

同样原理, 鼠标插拔的事件也可以被检测到,并启动自己的相关程序,不过这个相关脚本要放在/etc/hotplug.d/usb目录下。

使用udev的时候发现一个问题,hid目录下的热插拔脚本会被执行2次,看来udev和hotplug有重复的部分。

-------------- 用鼠标滚轮控制音量 --------------
参考了网上“Linux鼠标数据读取操作”的文章,稍做修改就可以用来调节alsa播放的音量大小了。
mouse的默认驱动是没有鼠标滚轮数值的,你需要增加下面的代码,将鼠标设置为Miscrosft Intellimouse类型鼠标:
… …
unsigned char setbuf[6]={0xf3,200,0xf3,100,0xf3,80};
… …
/* set mouse type to Miscrosft Intellimouse */
nwrite=write(fd,setbuf,6);
参考: https://github.com/widora/ctest/blob/master/readmouse.c

把编译出来的readmouse程序放在上面的鼠标热插拔脚本里面,就会自动加载了。用鼠标滚轮来调节音量, 手感还真不错!
另外,你也可以把左/右/中按键分别用来控制后退/前进/暂停操作,使用起来也很方便。

如果你使用无线鼠标的话就相当于一个遥控器了。
!

------------- 鼠标的热插拔脚本 ------------
鼠标的热插拔脚本本来放在usb目录下,后来觉得放在hid (Human Interface Device) 目录下比较恰当。

  1. 修改/etc/hotplug.json文件,在SUBSYSTME设置中增加hid ,见下:
...  
        [ "if",
                [ "eq", "SUBSYSTEM",
                        [ "net", "input", "hid", "usb", "usbmisc", "ieee1394", "block", "atm", "zaptel", "tty", "button" ]
                ],
                [ "exec", "/sbin/hotplug-call", "%SUBSYSTEM%" ]
        ],
...

完成后需要重启一下widora。

  1. 在/etc/hotplug.json目录下建立一个hid目录,在其中建立一个 名为readmouse的文件,内容如下:
case "$ACTION" in
        add)
                if [ "$HID_NAME"x = "Logitech USB-PS/2 Optical Mouse"x ];then
                        #--------- 以是鼠标数据的处理程序 
                        screen -dmS READMOUSE /home/readmouse /dev/input/mouse0
                fi
                ;;
        remove)
                if [ ! -c "/dev/input/mouse0" ];then
                        killall readmouse
                fi
                ;;
esac

HID_NAME根据你的鼠标具体设置。

  1. 插拔一下鼠标试验一下。

另外,发现放在hid目录里的脚本在开机的时候也能自动加载,当然,前提是你的usb设备已经插入了。

做了2点改进:

  1. 自动获得设备名。
  2. 拔出时自动kill掉相关进程。
case "$ACTION" in
        add)
                if [ -b "/dev/$DEVNAME" ]; then
                        mkdir /mnt/music
                        mount /dev/$DEVNAME /mnt/music
                        ls /mnt/music/*.mp3 >/mnt/mp3.list
                        screen -dmS U_MPLAYER mplayer -slave -input file=/mplayer/slave -playlist /mnt/mp3.list
                fi
                ;;
        remove)
                if [ ! -b "/dev/$DEVNAME" ]; then
                        sync
                        runpid=`pgrep -f U_MPLAYER`
                        kill $runpid
                        rm -r /mnt/music
                fi
                ;;
esac