@@ -3,6 +3,8 @@ import std/[posix, times, options, monotimes]
33import ../ common/ evdev
44import handlers
55
6+ from ../ common/ fb import FbSize
7+
68const
79 InputDev = " /dev/input/event0"
810
@@ -96,27 +98,42 @@ proc shouldFire(self: var HotkeyEvent, chordDown: bool): bool =
9698 return false
9799
98100proc main () =
99- let fd = posix.open (InputDev , O_RDONLY or O_NONBLOCK )
100- if fd < 0 :
101- stderr.writeLine " Failed to open input device"
101+ let fbFd = open (" /dev/fb0" , O_RDONLY )
102+ if fbFd < 0 :
103+ stderr.writeLine " failed to open framebuffer"
104+ quit (1 )
105+
106+ let fbMap = mmap (nil , FbSize , PROT_READ , MAP_SHARED , fbFd, 0 )
107+ if fbMap == MAP_FAILED :
108+ discard close (fbFd)
109+ stderr.writeLine " failed to mmap framebuffer"
110+ quit (1 )
111+
112+ defer :
113+ discard munmap (fbMap, FbSize )
114+ discard close (fbFd)
115+
116+ let evFd = posix.open (InputDev , O_RDONLY or O_NONBLOCK )
117+ if evFd < 0 :
118+ stderr.writeLine " failed to open " & InputDev
102119 quit (1 )
103120
104- defer : discard close (fd )
121+ defer : discard close (evFd )
105122
106123 var pressedKeys = newKeyBitSet ()
107124
108125 var hotkeys = @ [
109- newPressHotkey (@ [KeyCode .KEY_RIGHTCTRL , KeyCode .KEY_PAGEDOWN ], screenshotHandler),
126+ newPressHotkey (@ [KeyCode .KEY_RIGHTCTRL , KeyCode .KEY_PAGEDOWN ], proc () = screenshotHandler (fbMap) ),
110127 newPressHotkey (@ [KeyCode .KEY_RIGHTCTRL , KeyCode .KEY_PAGEUP ], quicksaveHandler),
111128 newPressHotkey (@ [KeyCode .KEY_ENTER , KeyCode .KEY_PAGEUP ], killHandler),
112129 newHoldHotkey (@ [KeyCode .KEY_RIGHTCTRL , KeyCode .KEY_ENTER ], initDuration (seconds = 10 ), rebootHandler),
113130 ]
114131
115132 while true :
116- if pollReadable (fd , 250 ):
133+ if pollReadable (evFd , 250 ):
117134 var event: InputEvent
118135 while true :
119- let bytesRead = read (fd , addr event, sizeof (InputEvent ))
136+ let bytesRead = read (evFd , addr event, sizeof (InputEvent ))
120137 if bytesRead != sizeof (InputEvent ):
121138 break
122139
0 commit comments