Files
dmxconnect/peripherals.go

62 lines
2.5 KiB
Go
Raw Normal View History

package main
import (
"dmxconnect/hardware"
"fmt"
"github.com/rs/zerolog/log"
)
// AddPeripheral adds a peripheral to the project
2025-01-26 12:01:31 +01:00
func (a *App) AddPeripheral(peripheralData hardware.PeripheralInfo) (string, error) {
// Register this new peripheral
2025-11-29 17:42:42 +01:00
serialNumber, err := a.hardwareManager.RegisterPeripheral(a.ctx, peripheralData)
2025-01-26 12:01:31 +01:00
if err != nil {
return "", fmt.Errorf("unable to register the peripheral '%s': %w", serialNumber, err)
2025-01-26 12:01:31 +01:00
}
log.Trace().Str("file", "peripheral").Str("protocolName", peripheralData.ProtocolName).Str("periphID", serialNumber).Msg("device registered to the finder")
2025-01-26 12:01:31 +01:00
// Rewrite the serialnumber for virtual devices
peripheralData.SerialNumber = serialNumber
// Add the peripheral ID to the project
if a.projectInfo.PeripheralsInfo == nil {
a.projectInfo.PeripheralsInfo = make(map[string]hardware.PeripheralInfo)
}
2025-01-26 12:01:31 +01:00
a.projectInfo.PeripheralsInfo[peripheralData.SerialNumber] = peripheralData
log.Info().Str("file", "peripheral").Str("protocolName", peripheralData.ProtocolName).Str("periphID", peripheralData.SerialNumber).Msg("peripheral added to project")
return peripheralData.SerialNumber, nil
}
2025-11-29 17:42:42 +01:00
// GetPeripheralSettings gets the peripheral settings
func (a *App) GetPeripheralSettings(protocolName, peripheralSN string) (map[string]any, error) {
return a.hardwareManager.GetPeripheralSettings(peripheralSN)
}
// UpdatePeripheralSettings updates a specific setting of a peripheral
func (a *App) UpdatePeripheralSettings(protocolName, peripheralID string, settings map[string]any) error {
// Save the settings in the application
if a.projectInfo.PeripheralsInfo == nil {
a.projectInfo.PeripheralsInfo = make(map[string]hardware.PeripheralInfo)
}
pInfo := a.projectInfo.PeripheralsInfo[peripheralID]
pInfo.Settings = settings
a.projectInfo.PeripheralsInfo[peripheralID] = pInfo
// Apply changes in the peripheral
2025-11-29 17:42:42 +01:00
return a.hardwareManager.SetPeripheralSettings(a.ctx, peripheralID, pInfo.Settings)
}
// RemovePeripheral removes a peripheral from the project
func (a *App) RemovePeripheral(peripheralData hardware.PeripheralInfo) error {
2025-01-26 12:01:31 +01:00
// Unregister the peripheral from the finder
2025-11-29 17:42:42 +01:00
err := a.hardwareManager.UnregisterPeripheral(a.ctx, peripheralData)
if err != nil {
2025-11-29 17:42:42 +01:00
return fmt.Errorf("unable to unregister this peripheral: %w", err)
}
2025-01-26 12:01:31 +01:00
// Remove the peripheral ID from the project
delete(a.projectInfo.PeripheralsInfo, peripheralData.SerialNumber)
log.Info().Str("file", "peripheral").Str("protocolName", peripheralData.ProtocolName).Str("periphID", peripheralData.SerialNumber).Msg("peripheral removed from project")
2025-01-26 12:01:31 +01:00
return nil
}