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 { log.Trace().Str("file", "peripheral").Str("protocolName", peripheralData.ProtocolName).Str("periphID", serialNumber).Msg("device registered to the finder") return "", fmt.Errorf("unable to register the peripheral '%s'", serialNumber) } // 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]interface{}, 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]interface{}) 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(peripheralID, pInfo.Settings) } // RemovePeripheral removes a peripheral from the project func (a *App) RemovePeripheral(protocolName string, peripheralID string) error { // Unregister the peripheral from the finder f, err := a.hardwareManager.GetFinder(protocolName) if err != nil { log.Err(err).Str("file", "peripherals").Str("protocolName", protocolName).Msg("unable to find the finder") return fmt.Errorf("unable to find the finder") } err = f.UnregisterPeripheral(a.ctx, peripheralID) if err != nil { log.Err(err).Str("file", "peripherals").Str("peripheralID", peripheralID).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, peripheralID) log.Info().Str("file", "peripheral").Str("protocolName", protocolName).Str("periphID", peripheralID).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) // }