Files
beeon/app/pkg/device/report3/report3.go

140 lines
2.4 KiB
Go
Raw Normal View History

2026-02-13 20:33:17 +00:00
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
}