# HG changeset patch # User Dominique Corbex # Date 1223313321 -7200 # Node ID fd13f7f143da077fd32d2ca98170f38623d2fade # Parent 3d99ecce2d4b5579ac303d256ec19990f54ac815 acpid: acpi_fakekey added diff -r 3d99ecce2d4b -r fd13f7f143da acpid/acpi_fakekey Binary file acpid/acpi_fakekey has changed diff -r 3d99ecce2d4b -r fd13f7f143da acpid/acpi_fakekey.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/acpi_fakekey.c Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,64 @@ +#include +#include +#include +#include +#include +#include + +#define TestBit(bit, array) (array[(bit) / 8] & (1 << ((bit) % 8))) + +int find_keyboard() { + int i, j; + int fd; + char filename[32]; + char key_bitmask[(KEY_MAX + 7) / 8]; + + for (i=0; i<32; i++) { + snprintf(filename,sizeof(filename), "/dev/input/event%d", i); + + fd = open(filename, O_RDWR); + ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(key_bitmask)), key_bitmask); + + for (j = 0; j < BTN_MISC; j++) { + if (TestBit(j, key_bitmask)) + break; + } + + if (j < BTN_MISC) { + return fd; + } + close (fd); + } + return 0; +} + +int main(int argc, char** argv) { + int fd; + int key; + struct input_event event; + + if (argc == 2) { + key = atoi(argv[1]); + } else { + return 1; + } + + fd = find_keyboard(); + + if (!fd) { + return 2; + } + + event.type = EV_KEY; + event.code = key; + event.value = 1; + write(fd, &event, sizeof event); + + event.type = EV_KEY; + event.code = key; + event.value = 0; + write(fd, &event, sizeof event); + + return 0; +} + diff -r 3d99ecce2d4b -r fd13f7f143da acpid/key-constants --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/key-constants Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,246 @@ +# Generated from $INPUT dated mar aoû 26 22:06:20 CEST 2008 +KEY_RESERVED=0 +KEY_ESC=1 +KEY_1=2 +KEY_2=3 +KEY_3=4 +KEY_4=5 +KEY_5=6 +KEY_6=7 +KEY_7=8 +KEY_8=9 +KEY_9=10 +KEY_0=11 +KEY_MINUS=12 +KEY_EQUAL=13 +KEY_BACKSPACE=14 +KEY_TAB=15 +KEY_Q=16 +KEY_W=17 +KEY_E=18 +KEY_R=19 +KEY_T=20 +KEY_Y=21 +KEY_U=22 +KEY_I=23 +KEY_O=24 +KEY_P=25 +KEY_LEFTBRACE=26 +KEY_RIGHTBRACE=27 +KEY_ENTER=28 +KEY_LEFTCTRL=29 +KEY_A=30 +KEY_S=31 +KEY_D=32 +KEY_F=33 +KEY_G=34 +KEY_H=35 +KEY_J=36 +KEY_K=37 +KEY_L=38 +KEY_SEMICOLON=39 +KEY_APOSTROPHE=40 +KEY_GRAVE=41 +KEY_LEFTSHIFT=42 +KEY_BACKSLASH=43 +KEY_Z=44 +KEY_X=45 +KEY_C=46 +KEY_V=47 +KEY_B=48 +KEY_N=49 +KEY_M=50 +KEY_COMMA=51 +KEY_DOT=52 +KEY_SLASH=53 +KEY_RIGHTSHIFT=54 +KEY_KPASTERISK=55 +KEY_LEFTALT=56 +KEY_SPACE=57 +KEY_CAPSLOCK=58 +KEY_F1=59 +KEY_F2=60 +KEY_F3=61 +KEY_F4=62 +KEY_F5=63 +KEY_F6=64 +KEY_F7=65 +KEY_F8=66 +KEY_F9=67 +KEY_F10=68 +KEY_NUMLOCK=69 +KEY_SCROLLLOCK=70 +KEY_KP7=71 +KEY_KP8=72 +KEY_KP9=73 +KEY_KPMINUS=74 +KEY_KP4=75 +KEY_KP5=76 +KEY_KP6=77 +KEY_KPPLUS=78 +KEY_KP1=79 +KEY_KP2=80 +KEY_KP3=81 +KEY_KP0=82 +KEY_KPDOT=83 +KEY_ZENKAKUHANKAKU=85 +KEY_102ND=86 +KEY_F11=87 +KEY_F12=88 +KEY_RO=89 +KEY_KATAKANA=90 +KEY_HIRAGANA=91 +KEY_HENKAN=92 +KEY_KATAKANAHIRAGANA=93 +KEY_MUHENKAN=94 +KEY_KPJPCOMMA=95 +KEY_KPENTER=96 +KEY_RIGHTCTRL=97 +KEY_KPSLASH=98 +KEY_SYSRQ=99 +KEY_RIGHTALT=100 +KEY_LINEFEED=101 +KEY_HOME=102 +KEY_UP=103 +KEY_PAGEUP=104 +KEY_LEFT=105 +KEY_RIGHT=106 +KEY_END=107 +KEY_DOWN=108 +KEY_PAGEDOWN=109 +KEY_INSERT=110 +KEY_DELETE=111 +KEY_MACRO=112 +KEY_MUTE=113 +KEY_VOLUMEDOWN=114 +KEY_VOLUMEUP=115 +KEY_POWER=116 +KEY_KPEQUAL=117 +KEY_KPPLUSMINUS=118 +KEY_PAUSE=119 +KEY_KPCOMMA=121 +KEY_HANGEUL=122 +KEY_HANJA=123 +KEY_YEN=124 +KEY_LEFTMETA=125 +KEY_RIGHTMETA=126 +KEY_COMPOSE=127 +KEY_STOP=128 +KEY_AGAIN=129 +KEY_PROPS=130 +KEY_UNDO=131 +KEY_FRONT=132 +KEY_COPY=133 +KEY_OPEN=134 +KEY_PASTE=135 +KEY_FIND=136 +KEY_CUT=137 +KEY_HELP=138 +KEY_MENU=139 +KEY_CALC=140 +KEY_SETUP=141 +KEY_SLEEP=142 +KEY_WAKEUP=143 +KEY_FILE=144 +KEY_SENDFILE=145 +KEY_DELETEFILE=146 +KEY_XFER=147 +KEY_PROG1=148 +KEY_PROG2=149 +KEY_WWW=150 +KEY_MSDOS=151 +KEY_COFFEE=152 +KEY_DIRECTION=153 +KEY_CYCLEWINDOWS=154 +KEY_MAIL=155 +KEY_BOOKMARKS=156 +KEY_COMPUTER=157 +KEY_BACK=158 +KEY_FORWARD=159 +KEY_CLOSECD=160 +KEY_EJECTCD=161 +KEY_EJECTCLOSECD=162 +KEY_NEXTSONG=163 +KEY_PLAYPAUSE=164 +KEY_PREVIOUSSONG=165 +KEY_STOPCD=166 +KEY_RECORD=167 +KEY_REWIND=168 +KEY_PHONE=169 +KEY_ISO=170 +KEY_CONFIG=171 +KEY_HOMEPAGE=172 +KEY_REFRESH=173 +KEY_EXIT=174 +KEY_MOVE=175 +KEY_EDIT=176 +KEY_SCROLLUP=177 +KEY_SCROLLDOWN=178 +KEY_KPLEFTPAREN=179 +KEY_KPRIGHTPAREN=180 +KEY_NEW=181 +KEY_REDO=182 +KEY_F13=183 +KEY_F14=184 +KEY_F15=185 +KEY_F16=186 +KEY_F17=187 +KEY_F18=188 +KEY_F19=189 +KEY_F20=190 +KEY_F21=191 +KEY_F22=192 +KEY_F23=193 +KEY_F24=194 +KEY_PLAYCD=200 +KEY_PAUSECD=201 +KEY_PROG3=202 +KEY_PROG4=203 +KEY_SUSPEND=205 +KEY_CLOSE=206 +KEY_PLAY=207 +KEY_FASTFORWARD=208 +KEY_BASSBOOST=209 +KEY_PRINT=210 +KEY_HP=211 +KEY_CAMERA=212 +KEY_SOUND=213 +KEY_QUESTION=214 +KEY_EMAIL=215 +KEY_CHAT=216 +KEY_SEARCH=217 +KEY_CONNECT=218 +KEY_FINANCE=219 +KEY_SPORT=220 +KEY_SHOP=221 +KEY_ALTERASE=222 +KEY_CANCEL=223 +KEY_BRIGHTNESSDOWN=224 +KEY_BRIGHTNESSUP=225 +KEY_MEDIA=226 +KEY_SWITCHVIDEOMODE=227 +KEY_KBDILLUMTOGGLE=228 +KEY_KBDILLUMDOWN=229 +KEY_KBDILLUMUP=230 +KEY_SEND=231 +KEY_REPLY=232 +KEY_FORWARDMAIL=233 +KEY_SAVE=234 +KEY_DOCUMENTS=235 +KEY_BATTERY=236 +KEY_BLUETOOTH=237 +KEY_WLAN=238 +KEY_UWB=239 +KEY_UNKNOWN=240 +KEY_VIDEO_NEXT=241 +KEY_VIDEO_PREV=242 +KEY_BRIGHTNESS_CYCLE=243 +KEY_BRIGHTNESS_ZERO=244 +KEY_DISPLAY_OFF=245 +KEY_WIMAX=246 +KEY_LOCK=$KEY_COFFEE +KEY_LIGHT=$KEY_F19 +KEY_VIDEOOUT=$KEY_F20 +KEY_ROTATESCREEN=$KEY_F21 +KEY_VIDEOMODECYCLE=$KEY_F22 +KEY_PRESENTATION=\KEY_F23 diff -r 3d99ecce2d4b -r fd13f7f143da acpid/receipt --- a/acpid/receipt Sun Oct 05 23:16:15 2008 +0000 +++ b/acpid/receipt Mon Oct 06 19:15:21 2008 +0200 @@ -9,10 +9,27 @@ TARBALL="$PACKAGE-$VERSION.tar.gz" WEB_SITE="http://acpid.sourceforge.net/" WGET_URL="$SF_MIRROR/$PACKAGE/$TARBALL" +KEY_FILE="key-constants" # Rules to configure and make the package. compile_rules() { + # Build acpi_fakekey utility + cp -a stuff/acpi_fakekey.c . + gcc -g -Wall -o acpi_fakekey acpi_fakekey.c + # Generate key constants file + INPUT_H="/usr/include/linux/input.h" + echo -n '# Generated from $INPUT dated ' > $KEY_FILE + date -r $INPUT_H >> $KEY_FILE + echo "KEY_RESERVED=0" >> $KEY_FILE + awk '/define KEY_/{if($3 <= 255 && $3 > 0) print $2"="$3}' $INPUT_H | sort -nt'=' -k2 >> $KEY_FILE + echo "KEY_LOCK=\$KEY_COFFEE" >> $KEY_FILE + echo "KEY_LIGHT=\$KEY_F19" >> $KEY_FILE + echo "KEY_VIDEOOUT=\$KEY_F20" >> $KEY_FILE + echo "KEY_ROTATESCREEN=\$KEY_F21" >> $KEY_FILE + echo "KEY_VIDEOMODECYCLE=\$KEY_F22" >> $KEY_FILE + echo "KEY_PRESENTATION=\KEY_F23" >> $KEY_FILE + # Build acpid cd $src make clean && make make INSTPREFIX=$PWD/_pkg install @@ -22,13 +39,19 @@ genpkg_rules() { mkdir -p $fs/usr + # acpid + cp -a $_pkg/usr/sbin $fs/usr + # acpi_listen cp -a $_pkg/usr/bin $fs/usr - cp -a $_pkg/usr/sbin $fs/usr - mkdir -p $fs/etc/init.d - cp -a stuff/acpid $fs/etc/init.d - mkdir -p $fs/etc/acpi/events - cp -a stuff/power $fs/etc/acpi/events + # acpid conf files + mkdir -p $fs/etc + cp -a stuff/init.d $fs/etc/ + cp -a stuff/acpi $fs/etc/ + mkdir -p $fs/var/log/ touch $fs/var/log/acpid.log && chmod 700 $fs/var/log/acpid.log + # acpi_fakekey + cp -a acpi_fakekey $fs/usr/bin + cp -a $KEY_FILE $fs/etc/acpi/ } # Pre and post remove commands for Tazpkg @@ -41,7 +64,12 @@ post_remove() { if [ `ls /etc/acpi/events | wc -l` -eq 0 ]; then - echo -n "Removing /etc/acpi..." + echo -n "Removing /etc/acpi/events" + rm -rf /etc/acpi/events + status + fi + if [ `ls /etc/acpi | wc -l` -eq 0 ]; then + echo -n "Removing /etc/acpi" rm -rf /etc/acpi status fi diff -r 3d99ecce2d4b -r fd13f7f143da acpid/stuff/acpi/ac.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/stuff/acpi/ac.sh Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,40 @@ +#!/bin/sh +## +## ac.sh +## +## Made by Dominique Corbex +## Login +## +## Started on Mon Oct 6 12:56:58 2008 Dominique Corbex +## Last update +## + +# Disable laptop mode +# When laptop mode is enabled, the kernel will try to be smart +# about when to do IO, to give the disk and the SATA links as +# much time as possible in a low power state. + +if [ -e /proc/sys/vm/laptop_mode ] ; then + echo "Disabling laptop mode" + echo 0 > /proc/sys/vm/laptop_mode +fi + +# AC97 audio power saving mode +# The AC97 onboard audio chips support power saving, where the +# analog parts (codec) are powered down when no program is using +# the audio device. + +if [ -e /sys/module/snd_ac97_codec/parameters/power_save ] ; then + echo "Enabling AC97 audio power saving mode" + echo 0 > /sys/module/snd_ac97_codec/parameters/power_save +fi + +# The VM writeback time +# The VM subsystem caching allows the kernel to group consecutive +# writes into one big write, and to generally optimize the disk IO +# to be the most efficient. + +if [ -e /proc/sys/vm/dirty_writeback_centisecs ] ; then + echo "Writeback time reset back to 500ms" + echo 500 > /proc/sys/vm/dirty_writeback_centisecs +fi diff -r 3d99ecce2d4b -r fd13f7f143da acpid/stuff/acpi/battery.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/stuff/acpi/battery.sh Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,46 @@ +#!/bin/sh +## +## battery.sh +## +## Made by Dominique Corbex +## Login &2 + echo "patch or install a newer kernel." >&2 +else + echo "Enabling laptop mode" + echo 5 > /proc/sys/vm/laptop_mode +fi + +# AC97 audio power saving mode +# The AC97 onboard audio chips support power saving, where the +# analog parts (codec) are powered down when no program is using +# the audio device. + +if [ -e /sys/module/snd_ac97_codec/parameters/power_save ] ; then + echo "Enabling AC97 audio power saving mode" + echo 1 > /sys/module/snd_ac97_codec/parameters/power_save + echo 1 > /dev/dsp +fi + +# The VM writeback time +# The VM subsystem caching allows the kernel to group consecutive +# writes into one big write, and to generally optimize the disk IO +# to be the most efficient. + +if [ -e /proc/sys/vm/dirty_writeback_centisecs ] ; then + echo "Writeback time set to 1500ms" + echo 1500 > /proc/sys/vm/dirty_writeback_centisecs +fi + diff -r 3d99ecce2d4b -r fd13f7f143da acpid/stuff/acpi/events/ac --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/stuff/acpi/events/ac Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,5 @@ +# /etc/acpi/event/ac +# called when the user connects ac power + +event=ac_adapter +action=/etc/acpi/ac.sh diff -r 3d99ecce2d4b -r fd13f7f143da acpid/stuff/acpi/events/battery --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/stuff/acpi/events/battery Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,5 @@ +# /etc/acpi/event/battery +# called when ac power goes away + +event=battery +action=/etc/acpi/battery.sh diff -r 3d99ecce2d4b -r fd13f7f143da acpid/stuff/acpi_fakekey.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/stuff/acpi_fakekey.c Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,64 @@ +#include +#include +#include +#include +#include +#include + +#define TestBit(bit, array) (array[(bit) / 8] & (1 << ((bit) % 8))) + +int find_keyboard() { + int i, j; + int fd; + char filename[32]; + char key_bitmask[(KEY_MAX + 7) / 8]; + + for (i=0; i<32; i++) { + snprintf(filename,sizeof(filename), "/dev/input/event%d", i); + + fd = open(filename, O_RDWR); + ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(key_bitmask)), key_bitmask); + + for (j = 0; j < BTN_MISC; j++) { + if (TestBit(j, key_bitmask)) + break; + } + + if (j < BTN_MISC) { + return fd; + } + close (fd); + } + return 0; +} + +int main(int argc, char** argv) { + int fd; + int key; + struct input_event event; + + if (argc == 2) { + key = atoi(argv[1]); + } else { + return 1; + } + + fd = find_keyboard(); + + if (!fd) { + return 2; + } + + event.type = EV_KEY; + event.code = key; + event.value = 1; + write(fd, &event, sizeof event); + + event.type = EV_KEY; + event.code = key; + event.value = 0; + write(fd, &event, sizeof event); + + return 0; +} + diff -r 3d99ecce2d4b -r fd13f7f143da acpid/stuff/init.d/acpid --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/acpid/stuff/init.d/acpid Mon Oct 06 19:15:21 2008 +0200 @@ -0,0 +1,55 @@ +#!/bin/sh +# /etc/init.d/acpid: Start, stop and restart acpid deamon on SliTaz, at boot +# time or with the command line. +# +# To start daemon at boot time, just put the right name in the $RUN_DAEMONS +# variable of /etc/rcS.conf and configure options with /etc/daemons.conf. +# +. /etc/init.d/rc.functions +. /etc/daemons.conf + +NAME=acpid +DESC="ACPI event deamon" +DAEMON=/usr/sbin/acpid +OPTIONS=$ACPID_OPTIONS +PIDFILE=/var/run/acpid.pid + +case "$1" in + start) + if [ -f $PIDFILE ] ; then + echo "$NAME already running." + exit 1 + fi + echo -n "Starting $DESC: $NAME... " + $DAEMON $OPTIONS > /dev/null + status + ;; + stop) + if [ ! -f $PIDFILE ] ; then + echo "$NAME is not running." + exit 1 + fi + echo -n "Stopping $DESC: $NAME... " + kill `cat $PIDFILE` + status + ;; + restart) + if [ ! -f $PIDFILE ] ; then + echo "$NAME is not running." + exit 1 + fi + echo -n "Restarting $DESC: $NAME... " + kill `cat $PIDFILE` + sleep 2 + $DAEMON $OPTIONS > /dev/null + status + ;; + *) + echo "" + echo -e "\033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart]" + echo "" + exit 1 + ;; +esac + +exit 0