-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcapability.go
44 lines (37 loc) · 1.5 KB
/
capability.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
package nuga
import (
"github.com/mishamyrt/nuga-lib/device"
"github.com/mishamyrt/nuga-lib/internal/bit"
)
// Capability represents supported keyboard features
type Capability bit.Mask
// Has checks if capability is set
func (c Capability) Has(feature Capability) bool {
return bit.Mask(c).IsSet(bit.Mask(feature))
}
const (
// BacklightCapability represents that keyboard supports backlight control
BacklightCapability Capability = 1 << iota
// SidelightCapability represents that keyboard supports sidelight control
SidelightCapability Capability = 2 << iota
// HalolightCapability represents that keyboard supports halolight control
HalolightCapability Capability = 4 << iota
// KeysCapability represents that keyboard supports key mapping control
KeysCapability Capability = 8 << iota
// CustomBacklightCapability represents that keyboard supports custom backlight control
CustomBacklightCapability Capability = 16 << iota
)
const haloSeriesCapabilities = BacklightCapability | SidelightCapability | HalolightCapability
var modelCapabilities = map[device.Model]Capability{
device.Halo65: haloSeriesCapabilities | KeysCapability,
device.Halo75: haloSeriesCapabilities | KeysCapability | CustomBacklightCapability,
device.Halo96: haloSeriesCapabilities,
}
// GetCapabilities returns keyboard model capabilities pointer.
// If keyboard is not supported, returns nil.
func GetCapabilities(model device.Model) *Capability {
if supports, ok := modelCapabilities[model]; ok {
return &supports
}
return nil
}