package hardware import ( "context" "fmt" "math/rand" "strings" "github.com/rs/zerolog/log" ) // OS2LDriver represents how the protocol is defined type OS2LDriver struct { peripherals map[string]Peripheral // The list of peripherals } // NewOS2LDriver creates a new OS2L driver func NewOS2LDriver() *OS2LDriver { log.Trace().Str("file", "OS2LDriver").Msg("OS2L driver created") return &OS2LDriver{ peripherals: make(map[string]Peripheral), } } // Initialize initializes the MIDI driver func (d *OS2LDriver) Initialize() error { log.Trace().Str("file", "OS2LDriver").Msg("OS2L driver initialized") return nil } // CreatePeripheral creates a new OS2L peripheral func (d *OS2LDriver) CreatePeripheral(ctx context.Context) (Peripheral, error) { // Create a random serial number for this peripheral randomSerialNumber := strings.ToUpper(fmt.Sprintf("%08x", rand.Intn(1<<32))) log.Trace().Str("file", "OS2LDriver").Str("serialNumber", randomSerialNumber).Msg("OS2L peripheral created") peripheral := NewOS2LPeripheral("OS2L", randomSerialNumber) d.peripherals[randomSerialNumber] = peripheral log.Info().Str("file", "OS2LDriver").Str("serialNumber", randomSerialNumber).Msg("OS2L peripheral created and registered") return peripheral, nil } // RemovePeripheral removes an OS2L dev func (d *OS2LDriver) RemovePeripheral(serialNumber string) error { delete(d.peripherals, serialNumber) log.Info().Str("file", "OS2LDriver").Str("serialNumber", serialNumber).Msg("OS2L peripheral removed") return nil } // GetName returns the name of the driver func (d *OS2LDriver) GetName() string { return "OS2L" } // GetPeripheral gets the peripheral that correspond to the specified ID func (d *OS2LDriver) GetPeripheral(peripheralID string) (Peripheral, bool) { // Return the specified peripheral peripheral, found := d.peripherals[peripheralID] if !found { log.Error().Str("file", "OS2LDriver").Str("peripheralID", peripheralID).Msg("unable to get this peripheral in the OS2L driver") return nil, false } log.Trace().Str("file", "OS2LDriver").Str("peripheralID", peripheralID).Msg("OS2L peripheral found in the driver") return peripheral, true } // Scan scans the interfaces compatible with the MIDI protocol func (d *OS2LDriver) Scan(ctx context.Context) error { return nil }