generated from thinkode/modelRepository
127 lines
5.0 KiB
Go
127 lines
5.0 KiB
Go
package main
|
|
|
|
import (
|
|
"dmxconnect/hardware"
|
|
"fmt"
|
|
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
// AddPeripheral adds a peripheral to the project
|
|
func (a *App) AddPeripheral(peripheralData hardware.PeripheralInfo) (string, error) {
|
|
// Get the peripheral from its finder
|
|
f, err := a.hardwareManager.GetFinder(peripheralData.ProtocolName)
|
|
if err != nil {
|
|
log.Error().Str("file", "peripheral").Str("protocolName", peripheralData.ProtocolName).Msg("unable to found the specified finder")
|
|
return "", fmt.Errorf("unable to found the peripheral ID '%s'", peripheralData.SerialNumber)
|
|
}
|
|
// Register this new peripheral
|
|
serialNumber, err := f.RegisterPeripheral(a.ctx, peripheralData)
|
|
if err != nil {
|
|
return "", fmt.Errorf("unable to register the peripheral '%s': %w", serialNumber, err)
|
|
}
|
|
log.Trace().Str("file", "peripheral").Str("protocolName", peripheralData.ProtocolName).Str("periphID", serialNumber).Msg("device registered to the finder")
|
|
|
|
// 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)
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
// GetPeripheralSettings gets the peripheral settings
|
|
func (a *App) GetPeripheralSettings(protocolName, peripheralID string) (map[string]any, error) {
|
|
// Get the peripheral from its finder
|
|
f, err := a.hardwareManager.GetFinder(protocolName)
|
|
if err != nil {
|
|
log.Error().Str("file", "peripheral").Str("protocolName", protocolName).Str("periphID", peripheralID).Msg("unable to found the specified peripheral")
|
|
return nil, fmt.Errorf("unable to found the peripheral ID '%s'", peripheralID)
|
|
}
|
|
return f.GetPeripheralSettings(peripheralID)
|
|
}
|
|
|
|
// UpdatePeripheralSettings updates a specific setting of a peripheral
|
|
func (a *App) UpdatePeripheralSettings(protocolName, peripheralID string, settings map[string]any) error {
|
|
// Sets the settings with the finder
|
|
f, err := a.hardwareManager.GetFinder(protocolName)
|
|
if err != nil {
|
|
log.Error().Str("file", "peripheral").Str("protocolName", protocolName).Str("periphID", peripheralID).Msg("unable to found the specified peripheral")
|
|
return fmt.Errorf("unable to found the peripheral ID '%s'", peripheralID)
|
|
}
|
|
// 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
|
|
return f.SetPeripheralSettings(a.ctx, peripheralID, pInfo.Settings)
|
|
}
|
|
|
|
// RemovePeripheral removes a peripheral from the project
|
|
func (a *App) RemovePeripheral(peripheralData hardware.PeripheralInfo) error {
|
|
// Unregister the peripheral from the finder
|
|
f, err := a.hardwareManager.GetFinder(peripheralData.ProtocolName)
|
|
if err != nil {
|
|
log.Err(err).Str("file", "peripherals").Str("protocolName", peripheralData.ProtocolName).Msg("unable to find the finder")
|
|
return fmt.Errorf("unable to find the finder")
|
|
}
|
|
err = f.UnregisterPeripheral(a.ctx, peripheralData)
|
|
if err != nil {
|
|
log.Err(err).Str("file", "peripherals").Str("peripheralID", peripheralData.SerialNumber).Msg("unable to unregister this peripheral")
|
|
return fmt.Errorf("unable to unregister this peripheral")
|
|
}
|
|
// 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")
|
|
return nil
|
|
}
|
|
|
|
// FOR TESTING PURPOSE ONLY
|
|
|
|
// func (a *App) ActivateFTDI() error {
|
|
// // Connect the FTDI
|
|
// driver, err := a.hardwareManager.GetFinder("FTDI")
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
// periph, found := driver.GetPeripheral("A50285BI")
|
|
// if !found {
|
|
// return fmt.Errorf("unable to find the peripheral s/n %s", "A50285BI")
|
|
// }
|
|
// return periph.Activate(a.ctx)
|
|
// }
|
|
|
|
// func (a *App) SetDeviceFTDI(channelValue byte) error {
|
|
// // Connect the FTDI
|
|
// driver, err := a.hardwareManager.GetFinder("FTDI")
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
// periph, found := driver.GetPeripheral("A50285BI")
|
|
// if !found {
|
|
// return fmt.Errorf("unable to find the peripheral s/n %s", "A50285BI")
|
|
// }
|
|
// return periph.SetDeviceProperty(a.ctx, 0, 0, channelValue)
|
|
// }
|
|
|
|
// func (a *App) DeactivateFTDI() error {
|
|
// // Connect the FTDI
|
|
// driver, err := a.hardwareManager.GetFinder("FTDI")
|
|
// if err != nil {
|
|
// return err
|
|
// }
|
|
// periph, found := driver.GetPeripheral("A50285BI")
|
|
// if !found {
|
|
// return fmt.Errorf("unable to find the peripheral s/n %s", "A50285BI")
|
|
// }
|
|
// return periph.Deactivate(a.ctx)
|
|
// }
|