2025-01-18 14:53:29 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"dmxconnect/hardware"
|
|
|
|
|
"fmt"
|
|
|
|
|
|
|
|
|
|
"github.com/rs/zerolog/log"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// AddPeripheral adds a peripheral to the project
|
|
|
|
|
func (a *App) AddPeripheral(protocolName string, peripheralID string) error {
|
2025-01-25 16:00:02 +01:00
|
|
|
// Get the peripheral from its finder
|
2025-01-18 14:53:29 +00:00
|
|
|
p, found := a.hardwareManager.GetPeripheral(protocolName, peripheralID)
|
|
|
|
|
if !found {
|
|
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
// Add the peripheral ID to the project
|
|
|
|
|
a.projectInfo.PeripheralsInfo[peripheralID] = p.GetInfo()
|
|
|
|
|
log.Info().Str("file", "peripheral").Str("protocolName", protocolName).Str("periphID", peripheralID).Msg("peripheral added to project")
|
|
|
|
|
|
|
|
|
|
// TODO: Connect the peripheral
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-25 11:06:03 +01:00
|
|
|
// GetPeripheralSettings gets the peripheral settings
|
|
|
|
|
func (a *App) GetPeripheralSettings(protocolName, peripheralID string) (map[string]interface{}, error) {
|
2025-01-25 16:00:02 +01:00
|
|
|
// Get the peripheral from its finder
|
2025-01-25 11:06:03 +01:00
|
|
|
p, found := a.hardwareManager.GetPeripheral(protocolName, peripheralID)
|
|
|
|
|
if !found {
|
|
|
|
|
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 the peripheral settings
|
|
|
|
|
return p.GetSettings(), nil
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-25 16:00:02 +01:00
|
|
|
// UpdatePeripheralSetting updates a specific setting of a peripheral
|
|
|
|
|
func (a *App) UpdatePeripheralSetting(protocolName, peripheralID, settingName string, settingValue interface{}) error {
|
|
|
|
|
// Get the peripheral from its finder
|
|
|
|
|
p, found := a.hardwareManager.GetPeripheral(protocolName, peripheralID)
|
|
|
|
|
if !found {
|
|
|
|
|
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 setting in the application
|
|
|
|
|
if a.projectInfo.PeripheralsInfo == nil {
|
|
|
|
|
a.projectInfo.PeripheralsInfo = make(map[string]hardware.PeripheralInfo)
|
|
|
|
|
}
|
|
|
|
|
if a.projectInfo.PeripheralsInfo[peripheralID].Settings == nil {
|
|
|
|
|
a.projectInfo.PeripheralsInfo[peripheralID] = hardware.PeripheralInfo{
|
|
|
|
|
Settings: make(map[string]interface{}),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
a.projectInfo.PeripheralsInfo[peripheralID].Settings[settingName] = settingValue
|
|
|
|
|
// Apply changes in the peripheral
|
|
|
|
|
return p.SetPeripheralSetting(settingName, settingValue)
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-18 14:53:29 +00:00
|
|
|
// RemovePeripheral adds a peripheral to the project
|
|
|
|
|
func (a *App) RemovePeripheral(protocolName string, peripheralID string) error {
|
|
|
|
|
// TODO: Disconnect the peripheral
|
|
|
|
|
// Remove the peripheral ID from the project
|
|
|
|
|
delete(a.projectInfo.PeripheralsInfo, peripheralID)
|
|
|
|
|
log.Info().Str("file", "peripheral").Str("protocolName", protocolName).Str("periphID", peripheralID).Msg("peripheral removed from project")
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AddOS2LPeripheral adds a new OS2L peripheral
|
|
|
|
|
func (a *App) AddOS2LPeripheral() (hardware.PeripheralInfo, error) {
|
2025-01-25 16:00:02 +01:00
|
|
|
// Get the OS2L finder
|
2025-01-18 14:53:29 +00:00
|
|
|
os2lDriver, err := a.hardwareManager.GetFinder("OS2L")
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Err(err).Str("file", "peripheral").Msg("unable to found the OS2L driver")
|
|
|
|
|
return hardware.PeripheralInfo{}, err
|
|
|
|
|
}
|
|
|
|
|
log.Trace().Str("file", "peripheral").Msg("OS2L driver got")
|
|
|
|
|
|
2025-01-25 16:00:02 +01:00
|
|
|
// Create a new OS2L peripheral with this finder
|
2025-01-18 14:53:29 +00:00
|
|
|
os2lPeripheral, err := os2lDriver.CreatePeripheral(a.ctx)
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Err(err).Str("file", "peripheral").Msg("unable to create the OS2L peripheral")
|
|
|
|
|
return hardware.PeripheralInfo{}, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
os2lInfo := os2lPeripheral.GetInfo()
|
|
|
|
|
log.Info().Str("file", "peripheral").Str("s/n", os2lInfo.SerialNumber).Msg("OS2L peripheral created, adding to project")
|
|
|
|
|
// Add this new peripheral to the project
|
|
|
|
|
return os2lInfo, a.AddPeripheral(os2lDriver.GetName(), os2lInfo.SerialNumber)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// FOR TESTING PURPOSE ONLY
|
|
|
|
|
|
|
|
|
|
func (a *App) ConnectFTDI() 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.Connect(a.ctx)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) DisconnectFTDI() 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.Disconnect(a.ctx)
|
|
|
|
|
}
|