forked from talkkonnect/talkkonnect
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathusbkeyboard.go
117 lines (108 loc) · 3.41 KB
/
usbkeyboard.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* talkkonnect headless mumble client/gateway with lcd screen and channel control
* Copyright (C) 2018-2019, Suvir Kumar <[email protected]>
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* talkkonnect is the based on talkiepi and barnard by Daniel Chote and Tim Cooper
*
* The Initial Developer of the Original Code is
* Suvir Kumar <[email protected]>
* Portions created by the Initial Developer are Copyright (C) Suvir Kumar. All Rights Reserved.
*
* Contributor(s):
*
* Suvir Kumar <[email protected]>
* Library golang-evdev Copyright (c) 2016 Georgi Valkov. All rights reserved. See Copyright Message in Library source code.
*
* My Blog is at www.talkkonnect.com
* The source code is hosted at github.com/talkkonnect
*
* usbkeyboard.go -> function in talkkonnect for reading from external usb keyboard
*/
package talkkonnect
import (
"log"
"strconv"
"strings"
evdev "github.com/gvalkov/golang-evdev"
)
func (b *Talkkonnect) USBKeyboard() {
device, err := evdev.Open(USBKeyboardPath)
if err != nil {
log.Printf("error: Unable to open USB Keyboard input device: %s\nError: %v It will now Be Disabled\n", USBKeyboardPath, err)
return
}
for {
events, err := device.Read()
if err != nil {
log.Printf("error: Unable to Read Event From USB Keyboard error %v\n", err)
return
}
for _, ev := range events {
switch ev.Type {
case evdev.EV_KEY:
ke := evdev.NewKeyEvent(&ev)
if ke.State != evdev.KeyDown {
continue
}
if _, ok := USBKeyMap[rune(ke.Scancode)]; ok {
switch strings.ToLower(USBKeyMap[rune(ke.Scancode)].Command) {
case "channelup":
b.cmdChannelUp()
case "channeldown":
b.cmdChannelDown()
case "serverup":
b.cmdConnNextServer()
case "serverdown":
b.cmdConnPreviousServer()
case "mute":
b.cmdMuteUnmute("mute")
case "unmute":
b.cmdMuteUnmute("unmute")
case "mute-toggle":
b.cmdMuteUnmute("toggle")
case "stream-toggle":
b.cmdPlayback()
case "volumeup":
b.cmdVolumeUp()
case "volumedown":
b.cmdVolumeDown()
case "setcomment":
if USBKeyMap[rune(ke.Scancode)].ParamName == "setcomment" {
log.Println("info: Set Commment ", USBKeyMap[rune(ke.Scancode)].ParamValue)
b.Client.Self.SetComment(USBKeyMap[rune(ke.Scancode)].ParamValue)
}
case "transmitstart":
b.cmdStartTransmitting()
case "transmitstop":
b.cmdStopTransmitting()
case "record":
b.cmdAudioTrafficRecord()
b.cmdAudioMicRecord()
case "setvoicetarget":
voicetarget, err := strconv.Atoi(USBKeyMap[rune(ke.Scancode)].ParamValue)
if err != nil {
log.Println("error: Target is Non-Numeric Value")
} else {
b.cmdSendVoiceTargets(uint32(voicetarget))
}
default:
log.Println("Command Not Defined ", strings.ToLower(USBKeyMap[rune(ke.Scancode)].Command))
}
} else {
if ke.Scancode != uint16(NumlockScanID) {
log.Println("error: Key Not Mapped ASC ", ke.Scancode)
}
}
}
}
}
}