1use libc::c_int;
2use ffi::*;
3use crate::Event;
4use super::{Kind, Code, Press, Release};
5
6#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
7pub enum Keyboard {
8 All,
9 Key(Key),
10 KeyPad(KeyPad),
11 Misc(Misc),
12 InputAssist(InputAssist),
13 Function(Function),
14 Braille(Braille),
15 Numeric(Numeric),
16 TouchPad(TouchPad),
17 Camera(Camera),
18 Attendant(Attendant),
19}
20
21impl Into<Event> for Keyboard {
22 fn into(self) -> Event {
23 Event::Keyboard(self)
24 }
25}
26
27impl Press for Keyboard { }
28impl Release for Keyboard { }
29
30impl Kind for Keyboard {
31 fn kind(&self) -> c_int {
32 EV_KEY
33 }
34}
35
36impl Code for Keyboard {
37 fn code(&self) -> c_int {
38 match self {
39 &Keyboard::All => unreachable!(),
40
41 &Keyboard::Key(ref v) => v.code(),
42 &Keyboard::KeyPad(ref v) => v.code(),
43 &Keyboard::Misc(ref v) => v.code(),
44 &Keyboard::InputAssist(ref v) => v.code(),
45 &Keyboard::Function(ref v) => v.code(),
46 &Keyboard::Braille(ref v) => v.code(),
47 &Keyboard::Numeric(ref v) => v.code(),
48 &Keyboard::TouchPad(ref v) => v.code(),
49 &Keyboard::Camera(ref v) => v.code(),
50 &Keyboard::Attendant(ref v) => v.code(),
51 }
52 }
53}
54
55custom_derive! {
56 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(KeyVariants))]
57 pub enum Key {
58 Reserved,
59 Esc,
60 _1,
61 _2,
62 _3,
63 _4,
64 _5,
65 _6,
66 _7,
67 _8,
68 _9,
69 _0,
70 Minus,
71 Equal,
72 BackSpace,
73 Tab,
74 Q,
75 W,
76 E,
77 R,
78 T,
79 Y,
80 U,
81 I,
82 O,
83 P,
84 LeftBrace,
85 RightBrace,
86 Enter,
87 LeftControl,
88 A,
89 S,
90 D,
91 F,
92 G,
93 H,
94 J,
95 K,
96 L,
97 SemiColon,
98 Apostrophe,
99 Grave,
100 LeftShift,
101 BackSlash,
102 Z,
103 X,
104 C,
105 V,
106 B,
107 N,
108 M,
109 Comma,
110 Dot,
111 Slash,
112 RightShift,
113 LeftAlt,
114 Space,
115 CapsLock,
116 F1,
117 F2,
118 F3,
119 F4,
120 F5,
121 F6,
122 F7,
123 F8,
124 F9,
125 F10,
126 NumLock,
127 ScrollLock,
128 F11,
129 F12,
130 RightControl,
131 SysRq,
132 RightAlt,
133 LineFeed,
134 Home,
135 Up,
136 PageUp,
137 Left,
138 Right,
139 End,
140 Down,
141 PageDown,
142 Insert,
143 Delete,
144 LeftMeta,
145 RightMeta,
146 ScrollUp,
147 ScrollDown,
148 F13,
149 F14,
150 F15,
151 F16,
152 F17,
153 F18,
154 F19,
155 F20,
156 F21,
157 F22,
158 F23,
159 F24,
160 }
161}
162
163impl Into<Event> for Key {
164 fn into(self) -> Event {
165 Event::Keyboard(Keyboard::Key(self))
166 }
167}
168
169impl Press for Key { }
170impl Release for Key { }
171
172impl Kind for Key {
173 fn kind(&self) -> c_int {
174 EV_KEY
175 }
176}
177
178impl Code for Key {
179 fn code(&self) -> c_int {
180 match self {
181 &Key::Reserved => KEY_RESERVED,
182 &Key::Esc => KEY_ESC,
183 &Key::_1 => KEY_1,
184 &Key::_2 => KEY_2,
185 &Key::_3 => KEY_3,
186 &Key::_4 => KEY_4,
187 &Key::_5 => KEY_5,
188 &Key::_6 => KEY_6,
189 &Key::_7 => KEY_7,
190 &Key::_8 => KEY_8,
191 &Key::_9 => KEY_9,
192 &Key::_0 => KEY_10,
193 &Key::Minus => KEY_MINUS,
194 &Key::Equal => KEY_EQUAL,
195 &Key::BackSpace => KEY_BACKSPACE,
196 &Key::Tab => KEY_TAB,
197 &Key::Q => KEY_Q,
198 &Key::W => KEY_W,
199 &Key::E => KEY_E,
200 &Key::R => KEY_R,
201 &Key::T => KEY_T,
202 &Key::Y => KEY_Y,
203 &Key::U => KEY_U,
204 &Key::I => KEY_I,
205 &Key::O => KEY_O,
206 &Key::P => KEY_P,
207 &Key::LeftBrace => KEY_LEFTBRACE,
208 &Key::RightBrace => KEY_RIGHTBRACE,
209 &Key::Enter => KEY_ENTER,
210 &Key::LeftControl => KEY_LEFTCTRL,
211 &Key::A => KEY_A,
212 &Key::S => KEY_S,
213 &Key::D => KEY_D,
214 &Key::F => KEY_F,
215 &Key::G => KEY_G,
216 &Key::H => KEY_H,
217 &Key::J => KEY_J,
218 &Key::K => KEY_K,
219 &Key::L => KEY_L,
220 &Key::SemiColon => KEY_SEMICOLON,
221 &Key::Apostrophe => KEY_APOSTROPHE,
222 &Key::Grave => KEY_GRAVE,
223 &Key::LeftShift => KEY_LEFTSHIFT,
224 &Key::BackSlash => KEY_BACKSLASH,
225 &Key::Z => KEY_Z,
226 &Key::X => KEY_X,
227 &Key::C => KEY_C,
228 &Key::V => KEY_V,
229 &Key::B => KEY_B,
230 &Key::N => KEY_N,
231 &Key::M => KEY_M,
232 &Key::Comma => KEY_COMMA,
233 &Key::Dot => KEY_DOT,
234 &Key::Slash => KEY_SLASH,
235 &Key::RightShift => KEY_RIGHTSHIFT,
236 &Key::LeftAlt => KEY_LEFTALT,
237 &Key::Space => KEY_SPACE,
238 &Key::CapsLock => KEY_CAPSLOCK,
239 &Key::F1 => KEY_F1,
240 &Key::F2 => KEY_F2,
241 &Key::F3 => KEY_F3,
242 &Key::F4 => KEY_F4,
243 &Key::F5 => KEY_F5,
244 &Key::F6 => KEY_F6,
245 &Key::F7 => KEY_F7,
246 &Key::F8 => KEY_F8,
247 &Key::F9 => KEY_F9,
248 &Key::F10 => KEY_F10,
249 &Key::NumLock => KEY_NUMLOCK,
250 &Key::ScrollLock => KEY_SCROLLLOCK,
251 &Key::F11 => KEY_F11,
252 &Key::F12 => KEY_F12,
253 &Key::RightControl => KEY_RIGHTCTRL,
254 &Key::SysRq => KEY_SYSRQ,
255 &Key::RightAlt => KEY_RIGHTALT,
256 &Key::LineFeed => KEY_LINEFEED,
257 &Key::Home => KEY_HOME,
258 &Key::Up => KEY_UP,
259 &Key::PageUp => KEY_PAGEUP,
260 &Key::Left => KEY_LEFT,
261 &Key::Right => KEY_RIGHT,
262 &Key::End => KEY_END,
263 &Key::Down => KEY_DOWN,
264 &Key::PageDown => KEY_PAGEDOWN,
265 &Key::Insert => KEY_INSERT,
266 &Key::Delete => KEY_DELETE,
267 &Key::LeftMeta => KEY_LEFTMETA,
268 &Key::RightMeta => KEY_RIGHTMETA,
269 &Key::ScrollUp => KEY_SCROLLUP,
270 &Key::ScrollDown => KEY_SCROLLDOWN,
271 &Key::F13 => KEY_F13,
272 &Key::F14 => KEY_F14,
273 &Key::F15 => KEY_F15,
274 &Key::F16 => KEY_F16,
275 &Key::F17 => KEY_F17,
276 &Key::F18 => KEY_F18,
277 &Key::F19 => KEY_F19,
278 &Key::F20 => KEY_F20,
279 &Key::F21 => KEY_F21,
280 &Key::F22 => KEY_F22,
281 &Key::F23 => KEY_F23,
282 &Key::F24 => KEY_F24,
283 }
284 }
285}
286
287custom_derive! {
288 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(KeyPadVariants))]
289 pub enum KeyPad {
290 Asterisk,
291 _7,
292 _8,
293 _9,
294 Minus,
295 _4,
296 _5,
297 _6,
298 Plus,
299 _1,
300 _2,
301 _3,
302 _0,
303 Dot,
304 AltComma,
305 Enter,
306 Slash,
307 Equal,
308 PlusMinus,
309 Comma,
310 LeftParen,
311 RightParen,
312 }
313}
314
315impl Into<Event> for KeyPad {
316 fn into(self) -> Event {
317 Event::Keyboard(Keyboard::KeyPad(self))
318 }
319}
320
321impl Press for KeyPad { }
322impl Release for KeyPad { }
323
324impl Kind for KeyPad {
325 fn kind(&self) -> c_int {
326 EV_KEY
327 }
328}
329
330impl Code for KeyPad {
331 fn code(&self) -> c_int {
332 match self {
333 &KeyPad::Asterisk => KEY_KPASTERISK,
334 &KeyPad::_7 => KEY_KP7,
335 &KeyPad::_8 => KEY_KP8,
336 &KeyPad::_9 => KEY_KP9,
337 &KeyPad::Minus => KEY_KPMINUS,
338 &KeyPad::_4 => KEY_KP4,
339 &KeyPad::_5 => KEY_KP5,
340 &KeyPad::_6 => KEY_KP6,
341 &KeyPad::Plus => KEY_KPPLUS,
342 &KeyPad::_1 => KEY_KP1,
343 &KeyPad::_2 => KEY_KP2,
344 &KeyPad::_3 => KEY_KP3,
345 &KeyPad::_0 => KEY_KP0,
346 &KeyPad::Dot => KEY_KPDOT,
347 &KeyPad::AltComma => KEY_KPJPCOMMA,
348 &KeyPad::Enter => KEY_KPENTER,
349 &KeyPad::Slash => KEY_KPSLASH,
350 &KeyPad::Equal => KEY_KPEQUAL,
351 &KeyPad::PlusMinus => KEY_KPPLUSMINUS,
352 &KeyPad::Comma => KEY_KPCOMMA,
353 &KeyPad::LeftParen => KEY_KPLEFTPAREN,
354 &KeyPad::RightParen => KEY_KPRIGHTPAREN,
355 }
356 }
357}
358
359custom_derive! {
360 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(MiscVariants))]
361 pub enum Misc {
362 ZenkakuHankaku,
363 ND102,
364 RO,
365 Katakana,
366 Hiragana,
367 Henkan,
368 KatakanaHiragana,
369 Muhenkan,
370 Macro,
371 Mute,
372 VolumeDown,
373 VolumeUp,
374 Power,
375 Pause,
376 Scale,
377 Hangeul,
378 Hanguel,
379 Hanja,
380 Yen,
381 Compose,
382 Stop,
383 Again,
384 Props,
385 Undo,
386 Front,
387 Copy,
388 Open,
389 Paste,
390 Find,
391 Cut,
392 Help,
393 Menu,
394 Calc,
395 Setup,
396 Sleep,
397 WakeUp,
398 File,
399 SendFile,
400 DeleteFile,
401 XFer,
402 Prog1,
403 Prog2,
404 WWW,
405 MSDOS,
406 Coffee,
407 ScreenLock,
408 RotateDisplay,
409 Direction,
410 CycleWindows,
411 Mail,
412 Bookmarks,
413 Computer,
414 Back,
415 Forward,
416 CloseCD,
417 EjectCD,
418 EjectCloseCD,
419 NextSong,
420 PlayPause,
421 PreviousSong,
422 StopCD,
423 Record,
424 Rewind,
425 Phone,
426 Iso,
427 Config,
428 HomePage,
429 Refresh,
430 Exit,
431 Move,
432 Edit,
433 New,
434 Redo,
435 PlayCD,
436 PauseCD,
437 Prog3,
438 Prog4,
439 DashBoard,
440 Suspend,
441 Close,
442 Play,
443 FastForward,
444 BassBoost,
445 Print,
446 HP,
447 Camera,
448 Sound,
449 Question,
450 Email,
451 Chat,
452 Search,
453 Connect,
454 Finance,
455 Sport,
456 Shop,
457 AltErase,
458 Cancel,
459 BrightnessDown,
460 BrightnessUp,
461 Media,
462 SwitchVideoMode,
463 IllumToggle,
464 IllumDown,
465 IllumUp,
466 Send,
467 Reply,
468 ForwardEmail,
469 Save,
470 Documents,
471 Battery,
472 Bluetooth,
473 WLAN,
474 UWB,
475 Unknown,
476 VideoNext,
477 VideoPrev,
478 BrightnessCycle,
479 BrightnessAuto,
480 BrightnessZero,
481 DisplayOff,
482 WWAN,
483 WIMAX,
484 RFKILL,
485 MicMute,
486 Ok,
487 Select,
488 Goto,
489 Clear,
490 Power2,
491 Option,
492 Info,
493 Time,
494 Vendor,
495 Archive,
496 Program,
497 Channel,
498 Favorites,
499 EPG,
500 PVR,
501 MHP,
502 Language,
503 Title,
504 Subtitle,
505 Angle,
506 Zoom,
507 Mode,
508 Keyboard,
509 Screen,
510 PC,
511 TV,
512 TV2,
513 VCR,
514 VCR2,
515 SAT,
516 SAT2,
517 CD,
518 Tape,
519 Radio,
520 Tuner,
521 Player,
522 Text,
523 DVD,
524 AUX,
525 MP3,
526 Audio,
527 Video,
528 Directory,
529 List,
530 Memo,
531 Calendar,
532 Red,
533 Green,
534 Yellow,
535 Blue,
536 ChannelUp,
537 ChannelDown,
538 First,
539 Last,
540 AB,
541 Next,
542 Restart,
543 Slow,
544 Shuffle,
545 Break,
546 Previous,
547 Digits,
548 TEEN,
549 TWEN,
550 VideoPhone,
551 Games,
552 ZoomIn,
553 ZoomOut,
554 ZoomReset,
555 WordProcessor,
556 Editor,
557 SpreadSheet,
558 GraphicsEditor,
559 Presentation,
560 Database,
561 News,
562 VoiceMail,
563 AddressBook,
564 Messenger,
565 DisplayToggle,
566 BrightnessToggle,
567 SpellCheck,
568 LogOff,
569 Dollar,
570 Euro,
571 FrameBack,
572 FrameForward,
573 ContextMenu,
574 MediaRepeat,
575 Up10Channels,
576 Down10Channels,
577 Images,
578 DeleteEOL,
579 DeleteEOS,
580 InsertLine,
581 DeleteLine,
582 WPS,
583 LightsToggle,
584 ALSToggle,
585 ButtonConfig,
586 TaskManager,
587 Journal,
588 ControlPanel,
589 AppSelect,
590 ScreenSaver,
591 VoiceCommand,
592 BrighnessMin,
593 BrightnessMax,
594 }
595}
596
597impl Into<Event> for Misc {
598 fn into(self) -> Event {
599 Event::Keyboard(Keyboard::Misc(self))
600 }
601}
602
603impl Press for Misc { }
604impl Release for Misc { }
605
606impl Kind for Misc {
607 fn kind(&self) -> c_int {
608 EV_KEY
609 }
610}
611
612impl Code for Misc {
613 fn code(&self) -> c_int {
614 match self {
615 &Misc::ZenkakuHankaku => KEY_ZENKAKUHANKAKU,
616 &Misc::ND102 => KEY_102ND,
617 &Misc::RO => KEY_RO,
618 &Misc::Katakana => KEY_KATAKANA,
619 &Misc::Hiragana => KEY_HIRAGANA,
620 &Misc::Henkan => KEY_HENKAN,
621 &Misc::KatakanaHiragana => KEY_KATAKANAHIRAGANA,
622 &Misc::Muhenkan => KEY_MUHENKAN,
623 &Misc::Macro => KEY_MACRO,
624 &Misc::Mute => KEY_MUTE,
625 &Misc::VolumeDown => KEY_VOLUMEDOWN,
626 &Misc::VolumeUp => KEY_VOLUMEUP,
627 &Misc::Power => KEY_POWER,
628 &Misc::Pause => KEY_PAUSE,
629 &Misc::Scale => KEY_SCALE,
630 &Misc::Hangeul => KEY_HANGEUL,
631 &Misc::Hanguel => KEY_HANGUEL,
632 &Misc::Hanja => KEY_HANJA,
633 &Misc::Yen => KEY_YEN,
634 &Misc::Compose => KEY_COMPOSE,
635 &Misc::Stop => KEY_STOP,
636 &Misc::Again => KEY_AGAIN,
637 &Misc::Props => KEY_PROPS,
638 &Misc::Undo => KEY_UNDO,
639 &Misc::Front => KEY_FRONT,
640 &Misc::Copy => KEY_COPY,
641 &Misc::Open => KEY_OPEN,
642 &Misc::Paste => KEY_PASTE,
643 &Misc::Find => KEY_FIND,
644 &Misc::Cut => KEY_CUT,
645 &Misc::Help => KEY_HELP,
646 &Misc::Menu => KEY_MENU,
647 &Misc::Calc => KEY_CALC,
648 &Misc::Setup => KEY_SETUP,
649 &Misc::Sleep => KEY_SLEEP,
650 &Misc::WakeUp => KEY_WAKEUP,
651 &Misc::File => KEY_FILE,
652 &Misc::SendFile => KEY_SENDFILE,
653 &Misc::DeleteFile => KEY_DELETEFILE,
654 &Misc::XFer => KEY_XFER,
655 &Misc::Prog1 => KEY_PROG1,
656 &Misc::Prog2 => KEY_PROG2,
657 &Misc::WWW => KEY_WWW,
658 &Misc::MSDOS => KEY_MSDOS,
659 &Misc::Coffee => KEY_COFFEE,
660 &Misc::ScreenLock => KEY_SCREENLOCK,
661 &Misc::RotateDisplay => KEY_ROTATE_DISPLAY,
662 &Misc::Direction => KEY_DIRECTION,
663 &Misc::CycleWindows => KEY_CYCLEWINDOWS,
664 &Misc::Mail => KEY_MAIL,
665 &Misc::Bookmarks => KEY_BOOKMARKS,
666 &Misc::Computer => KEY_COMPUTER,
667 &Misc::Back => KEY_BACK,
668 &Misc::Forward => KEY_FORWARD,
669 &Misc::CloseCD => KEY_CLOSECD,
670 &Misc::EjectCD => KEY_EJECTCD,
671 &Misc::EjectCloseCD => KEY_EJECTCLOSECD,
672 &Misc::NextSong => KEY_NEXTSONG,
673 &Misc::PlayPause => KEY_PLAYPAUSE,
674 &Misc::PreviousSong => KEY_PREVIOUSSONG,
675 &Misc::StopCD => KEY_STOPCD,
676 &Misc::Record => KEY_RECORD,
677 &Misc::Rewind => KEY_REWIND,
678 &Misc::Phone => KEY_PHONE,
679 &Misc::Iso => KEY_ISO,
680 &Misc::Config => KEY_CONFIG,
681 &Misc::HomePage => KEY_HOMEPAGE,
682 &Misc::Refresh => KEY_REFRESH,
683 &Misc::Exit => KEY_EXIT,
684 &Misc::Move => KEY_MOVE,
685 &Misc::Edit => KEY_EDIT,
686 &Misc::New => KEY_NEW,
687 &Misc::Redo => KEY_REDO,
688 &Misc::PlayCD => KEY_PLAYCD,
689 &Misc::PauseCD => KEY_PAUSECD,
690 &Misc::Prog3 => KEY_PROG3,
691 &Misc::Prog4 => KEY_PROG4,
692 &Misc::DashBoard => KEY_DASHBOARD,
693 &Misc::Suspend => KEY_SUSPEND,
694 &Misc::Close => KEY_CLOSE,
695 &Misc::Play => KEY_PLAY,
696 &Misc::FastForward => KEY_FASTFORWARD,
697 &Misc::BassBoost => KEY_BASSBOOST,
698 &Misc::Print => KEY_PRINT,
699 &Misc::HP => KEY_HP,
700 &Misc::Camera => KEY_CAMERA,
701 &Misc::Sound => KEY_SOUND,
702 &Misc::Question => KEY_QUESTION,
703 &Misc::Email => KEY_EMAIL,
704 &Misc::Chat => KEY_CHAT,
705 &Misc::Search => KEY_SEARCH,
706 &Misc::Connect => KEY_CONNECT,
707 &Misc::Finance => KEY_FINANCE,
708 &Misc::Sport => KEY_SPORT,
709 &Misc::Shop => KEY_SHOP,
710 &Misc::AltErase => KEY_ALTERASE,
711 &Misc::Cancel => KEY_CANCEL,
712 &Misc::BrightnessDown => KEY_BRIGHTNESSDOWN,
713 &Misc::BrightnessUp => KEY_BRIGHTNESSUP,
714 &Misc::Media => KEY_MEDIA,
715 &Misc::SwitchVideoMode => KEY_SWITCHVIDEOMODE,
716 &Misc::IllumToggle => KEY_KBDILLUMTOGGLE,
717 &Misc::IllumDown => KEY_KBDILLUMDOWN,
718 &Misc::IllumUp => KEY_KBDILLUMUP,
719 &Misc::Send => KEY_SEND,
720 &Misc::Reply => KEY_REPLY,
721 &Misc::ForwardEmail => KEY_FORWARDMAIL,
722 &Misc::Save => KEY_SAVE,
723 &Misc::Documents => KEY_DOCUMENTS,
724 &Misc::Battery => KEY_BATTERY,
725 &Misc::Bluetooth => KEY_BLUETOOTH,
726 &Misc::WLAN => KEY_WLAN,
727 &Misc::UWB => KEY_UWB,
728 &Misc::Unknown => KEY_UNKNOWN,
729 &Misc::VideoNext => KEY_VIDEO_NEXT,
730 &Misc::VideoPrev => KEY_VIDEO_PREV,
731 &Misc::BrightnessCycle => KEY_BRIGHTNESS_CYCLE,
732 &Misc::BrightnessAuto => KEY_BRIGHTNESS_AUTO,
733 &Misc::BrightnessZero => KEY_BRIGHTNESS_ZERO,
734 &Misc::DisplayOff => KEY_DISPLAY_OFF,
735 &Misc::WWAN => KEY_WWAN,
736 &Misc::WIMAX => KEY_WIMAX,
737 &Misc::RFKILL => KEY_RFKILL,
738 &Misc::MicMute => KEY_MICMUTE,
739 &Misc::Ok => KEY_OK,
740 &Misc::Select => KEY_SELECT,
741 &Misc::Goto => KEY_GOTO,
742 &Misc::Clear => KEY_CLEAR,
743 &Misc::Power2 => KEY_POWER2,
744 &Misc::Option => KEY_OPTION,
745 &Misc::Info => KEY_INFO,
746 &Misc::Time => KEY_TIME,
747 &Misc::Vendor => KEY_VENDOR,
748 &Misc::Archive => KEY_ARCHIVE,
749 &Misc::Program => KEY_PROGRAM,
750 &Misc::Channel => KEY_CHANNEL,
751 &Misc::Favorites => KEY_FAVORITES,
752 &Misc::EPG => KEY_EPG,
753 &Misc::PVR => KEY_PVR,
754 &Misc::MHP => KEY_MHP,
755 &Misc::Language => KEY_LANGUAGE,
756 &Misc::Title => KEY_TITLE,
757 &Misc::Subtitle => KEY_SUBTITLE,
758 &Misc::Angle => KEY_ANGLE,
759 &Misc::Zoom => KEY_ZOOM,
760 &Misc::Mode => KEY_MODE,
761 &Misc::Keyboard => KEY_KEYBOARD,
762 &Misc::Screen => KEY_SCREEN,
763 &Misc::PC => KEY_PC,
764 &Misc::TV => KEY_TV,
765 &Misc::TV2 => KEY_TV2,
766 &Misc::VCR => KEY_VCR,
767 &Misc::VCR2 => KEY_VCR2,
768 &Misc::SAT => KEY_SAT,
769 &Misc::SAT2 => KEY_SAT2,
770 &Misc::CD => KEY_CD,
771 &Misc::Tape => KEY_TAPE,
772 &Misc::Radio => KEY_RADIO,
773 &Misc::Tuner => KEY_TUNER,
774 &Misc::Player => KEY_PLAYER,
775 &Misc::Text => KEY_TEXT,
776 &Misc::DVD => KEY_DVD,
777 &Misc::AUX => KEY_AUX,
778 &Misc::MP3 => KEY_MP3,
779 &Misc::Audio => KEY_AUDIO,
780 &Misc::Video => KEY_VIDEO,
781 &Misc::Directory => KEY_DIRECTORY,
782 &Misc::List => KEY_LIST,
783 &Misc::Memo => KEY_MEMO,
784 &Misc::Calendar => KEY_CALENDAR,
785 &Misc::Red => KEY_RED,
786 &Misc::Green => KEY_GREEN,
787 &Misc::Yellow => KEY_YELLOW,
788 &Misc::Blue => KEY_BLUE,
789 &Misc::ChannelUp => KEY_CHANNELUP,
790 &Misc::ChannelDown => KEY_CHANNELDOWN,
791 &Misc::First => KEY_FIRST,
792 &Misc::Last => KEY_LAST,
793 &Misc::AB => KEY_AB,
794 &Misc::Next => KEY_NEXT,
795 &Misc::Restart => KEY_RESTART,
796 &Misc::Slow => KEY_SLOW,
797 &Misc::Shuffle => KEY_SHUFFLE,
798 &Misc::Break => KEY_BREAK,
799 &Misc::Previous => KEY_PREVIOUS,
800 &Misc::Digits => KEY_DIGITS,
801 &Misc::TEEN => KEY_TEEN,
802 &Misc::TWEN => KEY_TWEN,
803 &Misc::VideoPhone => KEY_VIDEOPHONE,
804 &Misc::Games => KEY_GAMES,
805 &Misc::ZoomIn => KEY_ZOOMIN,
806 &Misc::ZoomOut => KEY_ZOOMOUT,
807 &Misc::ZoomReset => KEY_ZOOMRESET,
808 &Misc::WordProcessor => KEY_WORDPROCESSOR,
809 &Misc::Editor => KEY_EDITOR,
810 &Misc::SpreadSheet => KEY_SPREADSHEET,
811 &Misc::GraphicsEditor => KEY_GRAPHICSEDITOR,
812 &Misc::Presentation => KEY_PRESENTATION,
813 &Misc::Database => KEY_DATABASE,
814 &Misc::News => KEY_NEWS,
815 &Misc::VoiceMail => KEY_VOICEMAIL,
816 &Misc::AddressBook => KEY_ADDRESSBOOK,
817 &Misc::Messenger => KEY_MESSENGER,
818 &Misc::DisplayToggle => KEY_DISPLAYTOGGLE,
819 &Misc::BrightnessToggle => KEY_BRIGHTNESS_TOGGLE,
820 &Misc::SpellCheck => KEY_SPELLCHECK,
821 &Misc::LogOff => KEY_LOGOFF,
822 &Misc::Dollar => KEY_DOLLAR,
823 &Misc::Euro => KEY_EURO,
824 &Misc::FrameBack => KEY_FRAMEBACK,
825 &Misc::FrameForward => KEY_FRAMEFORWARD,
826 &Misc::ContextMenu => KEY_CONTEXT_MENU,
827 &Misc::MediaRepeat => KEY_MEDIA_REPEAT,
828 &Misc::Up10Channels => KEY_10CHANNELSUP,
829 &Misc::Down10Channels => KEY_10CHANNELSDOWN,
830 &Misc::Images => KEY_IMAGES,
831 &Misc::DeleteEOL => KEY_DEL_EOL,
832 &Misc::DeleteEOS => KEY_DEL_EOS,
833 &Misc::InsertLine => KEY_INS_LINE,
834 &Misc::DeleteLine => KEY_DEL_LINE,
835 &Misc::WPS => KEY_WPS_BUTTON,
836 &Misc::LightsToggle => KEY_LIGHTS_TOGGLE,
837 &Misc::ALSToggle => KEY_ALS_TOGGLE,
838 &Misc::ButtonConfig => KEY_BUTTONCONFIG,
839 &Misc::TaskManager => KEY_TASKMANAGER,
840 &Misc::Journal => KEY_JOURNAL,
841 &Misc::ControlPanel => KEY_CONTROLPANEL,
842 &Misc::AppSelect => KEY_APPSELECT,
843 &Misc::ScreenSaver => KEY_SCREENSAVER,
844 &Misc::VoiceCommand => KEY_VOICECOMMAND,
845 &Misc::BrighnessMin => KEY_BRIGHTNESS_MIN,
846 &Misc::BrightnessMax => KEY_BRIGHTNESS_MAX,
847 }
848 }
849}
850
851custom_derive! {
852 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(FunctionVariants))]
853 pub enum Function {
854 Press,
855 Esc,
856 F1,
857 F2,
858 F3,
859 F4,
860 F5,
861 F6,
862 F7,
863 F8,
864 F9,
865 F10,
866 F11,
867 F12,
868 _1,
869 _2,
870 D,
871 E,
872 F,
873 S,
874 B,
875 }
876}
877
878impl Into<Event> for Function {
879 fn into(self) -> Event {
880 Event::Keyboard(Keyboard::Function(self))
881 }
882}
883
884impl Press for Function { }
885impl Release for Function { }
886
887impl Kind for Function {
888 fn kind(&self) -> c_int {
889 EV_KEY
890 }
891}
892
893impl Code for Function {
894 fn code(&self) -> c_int {
895 match self {
896 &Function::Press => KEY_FN,
897 &Function::Esc => KEY_FN_ESC,
898 &Function::F1 => KEY_FN_F1,
899 &Function::F2 => KEY_FN_F2,
900 &Function::F3 => KEY_FN_F3,
901 &Function::F4 => KEY_FN_F4,
902 &Function::F5 => KEY_FN_F5,
903 &Function::F6 => KEY_FN_F6,
904 &Function::F7 => KEY_FN_F7,
905 &Function::F8 => KEY_FN_F8,
906 &Function::F9 => KEY_FN_F9,
907 &Function::F10 => KEY_FN_F10,
908 &Function::F11 => KEY_FN_F11,
909 &Function::F12 => KEY_FN_F12,
910 &Function::_1 => KEY_FN_1,
911 &Function::_2 => KEY_FN_2,
912 &Function::D => KEY_FN_D,
913 &Function::E => KEY_FN_E,
914 &Function::F => KEY_FN_F,
915 &Function::S => KEY_FN_S,
916 &Function::B => KEY_FN_B,
917 }
918 }
919}
920
921custom_derive! {
922 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(BrailleVariants))]
923 pub enum Braille {
924 Dot1,
925 Dot2,
926 Dot3,
927 Dot4,
928 Dot5,
929 Dot6,
930 Dot7,
931 Dot8,
932 Dot9,
933 Dot10,
934 }
935}
936
937impl Into<Event> for Braille {
938 fn into(self) -> Event {
939 Event::Keyboard(Keyboard::Braille(self))
940 }
941}
942
943impl Press for Braille { }
944impl Release for Braille { }
945
946impl Kind for Braille {
947 fn kind(&self) -> c_int {
948 EV_KEY
949 }
950}
951
952impl Code for Braille {
953 fn code(&self) -> c_int {
954 match self {
955 &Braille::Dot1 => KEY_BRL_DOT1,
956 &Braille::Dot2 => KEY_BRL_DOT2,
957 &Braille::Dot3 => KEY_BRL_DOT3,
958 &Braille::Dot4 => KEY_BRL_DOT4,
959 &Braille::Dot5 => KEY_BRL_DOT5,
960 &Braille::Dot6 => KEY_BRL_DOT6,
961 &Braille::Dot7 => KEY_BRL_DOT7,
962 &Braille::Dot8 => KEY_BRL_DOT8,
963 &Braille::Dot9 => KEY_BRL_DOT9,
964 &Braille::Dot10 => KEY_BRL_DOT10,
965 }
966 }
967}
968
969custom_derive! {
970 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(NumericVariants))]
971 pub enum Numeric {
972 _0,
973 _1,
974 _2,
975 _3,
976 _4,
977 _5,
978 _6,
979 _7,
980 _8,
981 _9,
982 Star,
983 Pound,
984 A,
985 B,
986 C,
987 D,
988 }
989}
990
991impl Into<Event> for Numeric {
992 fn into(self) -> Event {
993 Event::Keyboard(Keyboard::Numeric(self))
994 }
995}
996
997impl Press for Numeric { }
998impl Release for Numeric { }
999
1000impl Kind for Numeric {
1001 fn kind(&self) -> c_int {
1002 EV_KEY
1003 }
1004}
1005
1006impl Code for Numeric {
1007 fn code(&self) -> c_int {
1008 match self {
1009 &Numeric::_0 => KEY_NUMERIC_0,
1010 &Numeric::_1 => KEY_NUMERIC_1,
1011 &Numeric::_2 => KEY_NUMERIC_2,
1012 &Numeric::_3 => KEY_NUMERIC_3,
1013 &Numeric::_4 => KEY_NUMERIC_4,
1014 &Numeric::_5 => KEY_NUMERIC_5,
1015 &Numeric::_6 => KEY_NUMERIC_6,
1016 &Numeric::_7 => KEY_NUMERIC_7,
1017 &Numeric::_8 => KEY_NUMERIC_8,
1018 &Numeric::_9 => KEY_NUMERIC_9,
1019 &Numeric::Star => KEY_NUMERIC_STAR,
1020 &Numeric::Pound => KEY_NUMERIC_POUND,
1021 &Numeric::A => KEY_NUMERIC_A,
1022 &Numeric::B => KEY_NUMERIC_B,
1023 &Numeric::C => KEY_NUMERIC_C,
1024 &Numeric::D => KEY_NUMERIC_D,
1025 }
1026 }
1027}
1028
1029custom_derive! {
1030 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(TouchPadVariants))]
1031 pub enum TouchPad {
1032 Toggle,
1033 On,
1034 Off,
1035 }
1036}
1037
1038impl Into<Event> for TouchPad {
1039 fn into(self) -> Event {
1040 Event::Keyboard(Keyboard::TouchPad(self))
1041 }
1042}
1043
1044impl Press for TouchPad { }
1045impl Release for TouchPad { }
1046
1047impl Kind for TouchPad {
1048 fn kind(&self) -> c_int {
1049 EV_KEY
1050 }
1051}
1052
1053impl Code for TouchPad {
1054 fn code(&self) -> c_int {
1055 match self {
1056 &TouchPad::Toggle => KEY_TOUCHPAD_TOGGLE,
1057 &TouchPad::On => KEY_TOUCHPAD_ON,
1058 &TouchPad::Off => KEY_TOUCHPAD_OFF,
1059 }
1060 }
1061}
1062
1063custom_derive! {
1064 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(CameraVariants))]
1065 pub enum Camera {
1066 ZoomIn,
1067 ZoomOut,
1068 Up,
1069 Down,
1070 Left,
1071 Right,
1072 Focus,
1073 }
1074}
1075
1076impl Into<Event> for Camera {
1077 fn into(self) -> Event {
1078 Event::Keyboard(Keyboard::Camera(self))
1079 }
1080}
1081
1082impl Press for Camera { }
1083impl Release for Camera { }
1084
1085impl Kind for Camera {
1086 fn kind(&self) -> c_int {
1087 EV_KEY
1088 }
1089}
1090
1091impl Code for Camera {
1092 fn code(&self) -> c_int {
1093 match self {
1094 &Camera::ZoomIn => KEY_CAMERA_ZOOMIN,
1095 &Camera::ZoomOut => KEY_CAMERA_ZOOMOUT,
1096 &Camera::Up => KEY_CAMERA_UP,
1097 &Camera::Down => KEY_CAMERA_DOWN,
1098 &Camera::Left => KEY_CAMERA_LEFT,
1099 &Camera::Right => KEY_CAMERA_RIGHT,
1100 &Camera::Focus => KEY_CAMERA_FOCUS,
1101 }
1102 }
1103}
1104
1105custom_derive! {
1106 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(AttendantVariants))]
1107 pub enum Attendant {
1108 On,
1109 Off,
1110 Toggle,
1111 }
1112}
1113
1114impl Into<Event> for Attendant {
1115 fn into(self) -> Event {
1116 Event::Keyboard(Keyboard::Attendant(self))
1117 }
1118}
1119
1120impl Press for Attendant { }
1121impl Release for Attendant { }
1122
1123impl Kind for Attendant {
1124 fn kind(&self) -> c_int {
1125 EV_KEY
1126 }
1127}
1128
1129impl Code for Attendant {
1130 fn code(&self) -> c_int {
1131 match self {
1132 &Attendant::On => KEY_ATTENDANT_ON,
1133 &Attendant::Off => KEY_ATTENDANT_OFF,
1134 &Attendant::Toggle => KEY_ATTENDANT_TOGGLE,
1135 }
1136 }
1137}
1138
1139custom_derive! {
1140 #[derive(Clone, Copy, PartialEq, Eq, Hash, Debug, IterVariants(InputAssistVariants))]
1141 pub enum InputAssist {
1142 Prev,
1143 Next,
1144 PrevGroup,
1145 NextGroup,
1146 Accept,
1147 Cancel,
1148 }
1149}
1150
1151impl Into<Event> for InputAssist {
1152 fn into(self) -> Event {
1153 Event::Keyboard(Keyboard::InputAssist(self))
1154 }
1155}
1156
1157impl Press for InputAssist { }
1158impl Release for InputAssist { }
1159
1160impl Kind for InputAssist {
1161 fn kind(&self) -> c_int {
1162 EV_KEY
1163 }
1164}
1165
1166impl Code for InputAssist {
1167 fn code(&self) -> c_int {
1168 match self {
1169 &InputAssist::Prev => KEY_KBDINPUTASSIST_PREV,
1170 &InputAssist::Next => KEY_KBDINPUTASSIST_NEXT,
1171 &InputAssist::PrevGroup => KEY_KBDINPUTASSIST_PREVGROUP,
1172 &InputAssist::NextGroup => KEY_KBDINPUTASSIST_NEXTGROUP,
1173 &InputAssist::Accept => KEY_KBDINPUTASSIST_ACCEPT,
1174 &InputAssist::Cancel => KEY_KBDINPUTASSIST_CANCEL,
1175 }
1176 }
1177}