140 lines
2.4 KiB
Go
140 lines
2.4 KiB
Go
package report3
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"microjelly.com/beeon/app/pkg/device/keycodes"
|
|
)
|
|
|
|
type State uint8
|
|
|
|
const (
|
|
StateIdle = State(10)
|
|
StateActive = State(20)
|
|
StateUnset = State(255)
|
|
)
|
|
|
|
func (r State) String() string {
|
|
switch r {
|
|
case StateActive:
|
|
return "active"
|
|
case StateIdle:
|
|
return "idle"
|
|
case StateUnset:
|
|
return "unset"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
type Mode uint8
|
|
|
|
const (
|
|
ModeMouse = Mode(10)
|
|
ModeKeyboard = Mode(20)
|
|
ModeUnset = Mode(255)
|
|
)
|
|
|
|
func (r Mode) String() string {
|
|
switch r {
|
|
case ModeMouse:
|
|
return "mouse"
|
|
case ModeKeyboard:
|
|
return "keyboard"
|
|
case ModeUnset:
|
|
return "unset"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
type Rate uint8
|
|
|
|
const (
|
|
RateFast = Rate(1)
|
|
RateNormal = Rate(8)
|
|
RateSlow = Rate(16)
|
|
RateExtraSlow = Rate(32)
|
|
RateUnset = Rate(255)
|
|
)
|
|
|
|
func (r Rate) String() string {
|
|
switch r {
|
|
case RateFast:
|
|
return "fast"
|
|
case RateNormal:
|
|
return "normal"
|
|
case RateSlow:
|
|
return "slow"
|
|
case RateExtraSlow:
|
|
return "extra-slow"
|
|
case RateUnset:
|
|
return "unset"
|
|
default:
|
|
return fmt.Sprintf("custom (%d)", r)
|
|
}
|
|
}
|
|
|
|
type MouseMode uint8
|
|
|
|
const (
|
|
MouseModeCircle = MouseMode(10)
|
|
MouseModeRandom = MouseMode(20)
|
|
MouseModeUnset = MouseMode(255)
|
|
)
|
|
|
|
func (r MouseMode) String() string {
|
|
switch r {
|
|
case MouseModeCircle:
|
|
return "circle"
|
|
case MouseModeRandom:
|
|
return "random"
|
|
case MouseModeUnset:
|
|
return "unset"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
type Report struct {
|
|
State State
|
|
Mode Mode
|
|
Rate Rate
|
|
KeyCode keycodes.KeyCode
|
|
MouseMode MouseMode
|
|
}
|
|
|
|
func (r Report) String() string {
|
|
switch r.Mode {
|
|
case ModeMouse:
|
|
return fmt.Sprintf("{Mode: %s, MouseMode: %s, Rate: %s, State: %s}", r.Mode, r.MouseMode, r.Rate, r.State)
|
|
case ModeKeyboard:
|
|
return fmt.Sprintf("{Mode: %s, KeyCode: %s, Rate: %s, State: %s}", r.Mode, r.KeyCode, r.Rate, r.State)
|
|
case ModeUnset:
|
|
return fmt.Sprintf("{Mode: %s, MouseMode: %s, KeyCode: %s, Rate: %s, State: %s}", r.Mode, r.MouseMode, r.KeyCode, r.Rate, r.State)
|
|
default:
|
|
return "{invalid}"
|
|
}
|
|
}
|
|
|
|
func New(b []byte) *Report {
|
|
r := new(Report)
|
|
r.State = State(b[1])
|
|
r.Mode = Mode(b[2])
|
|
r.Rate = Rate(b[3])
|
|
r.KeyCode = keycodes.KeyCode(b[4])
|
|
r.MouseMode = MouseMode(b[5])
|
|
return r
|
|
}
|
|
|
|
func (r Report) Bytes() []byte {
|
|
b := make([]byte, 6)
|
|
b[0] = 3
|
|
b[1] = uint8(r.State)
|
|
b[2] = uint8(r.Mode)
|
|
b[3] = uint8(r.Rate)
|
|
b[4] = uint8(r.KeyCode)
|
|
b[5] = uint8(r.MouseMode)
|
|
return b
|
|
}
|