give up for now

This commit is contained in:
legop3
2026-01-15 12:23:03 -05:00
parent 655fed4326
commit 5b9167ab2a
17 changed files with 49 additions and 651 deletions
+10 -44
View File
@@ -15,8 +15,6 @@ type CameraServo struct {
cfg CameraServoConfig
logger *log.Logger
pin rpio.Pin
pigpio *pigpioClient
usePigpio bool
mu sync.Mutex
currentAngle float64
closed bool
@@ -26,30 +24,6 @@ func NewCameraServo(cfg CameraServoConfig, logger *log.Logger) (*CameraServo, er
if !cfg.Enabled {
return nil, fmt.Errorf("camera servo disabled")
}
servo := &CameraServo{
cfg: cfg,
logger: logger,
}
if client, err := newPigpioClient(defaultPigpioAddr); err == nil {
if err := setPigpioMode(client, cfg.Pin, piOutput); err == nil {
servo.pigpio = client
servo.usePigpio = true
} else {
_ = client.Close()
}
}
if servo.usePigpio {
if err := servo.setAngleLocked(cfg.HomeAngle); err != nil {
_ = servo.pigpio.Close()
return nil, err
}
logger.Printf("camera servo initialized on GPIO %d (pigpio, %.1f..%.1f deg, %d..%d us, invert=%v)", cfg.Pin, cfg.MinAngle, cfg.MaxAngle, cfg.MinPulseUs, cfg.MaxPulseUs, cfg.Invert)
return servo, nil
}
if err := rpio.Open(); err != nil {
return nil, fmt.Errorf("open gpio: %w", err)
}
@@ -58,8 +32,12 @@ func NewCameraServo(cfg CameraServoConfig, logger *log.Logger) (*CameraServo, er
pin.Mode(rpio.Pwm)
targetClock := cfg.FreqHz * cfg.CycleLen
pin.Freq(targetClock)
servo.pin = pin
servo := &CameraServo{
cfg: cfg,
logger: logger,
pin: pin,
}
if err := servo.setAngleLocked(cfg.HomeAngle); err != nil {
rpio.Close()
return nil, err
@@ -74,12 +52,8 @@ func (s *CameraServo) Close() {
if s.closed {
return
}
_ = s.applyPulseLocked(s.angleToPulse(s.cfg.HomeAngle))
if s.usePigpio {
_ = s.pigpio.Close()
} else {
rpio.Close()
}
s.applyPulseLocked(s.angleToPulse(s.cfg.HomeAngle))
rpio.Close()
s.closed = true
}
@@ -94,9 +68,7 @@ func (s *CameraServo) setAngleLocked(angle float64) error {
return fmt.Errorf("servo closed")
}
clamped := clampFloat(angle, s.cfg.MinAngle, s.cfg.MaxAngle)
if err := s.applyPulseLocked(s.angleToPulse(clamped)); err != nil {
return err
}
s.applyPulseLocked(s.angleToPulse(clamped))
s.currentAngle = clamped
return nil
}
@@ -123,9 +95,7 @@ func (s *CameraServo) SetPulseWidth(micros int) error {
if micros <= 0 {
return fmt.Errorf("pulse width must be > 0")
}
if err := s.applyPulseLocked(micros); err != nil {
return err
}
s.applyPulseLocked(micros)
s.currentAngle = s.pulseToAngle(micros)
return nil
}
@@ -136,13 +106,9 @@ func (s *CameraServo) CurrentAngle() float64 {
return s.currentAngle
}
func (s *CameraServo) applyPulseLocked(micros int) error {
func (s *CameraServo) applyPulseLocked(micros int) {
micros = clampInt(micros, s.cfg.MinPulseUs, s.cfg.MaxPulseUs)
if s.usePigpio {
return setPigpioServo(s.pigpio, s.cfg.Pin, micros)
}
s.pin.DutyCycle(uint32(micros), uint32(s.cfg.CycleLen))
return nil
}
func (s *CameraServo) angleToPulse(angle float64) int {