First implementation
This commit is contained in:
55
vendor/periph.io/x/periph/periph_serial.go
generated
vendored
Normal file
55
vendor/periph.io/x/periph/periph_serial.go
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
// Copyright 2018 The Periph Authors. All rights reserved.
|
||||
// Use of this source code is governed under the Apache License, Version 2.0
|
||||
// that can be found in the LICENSE file.
|
||||
|
||||
// This file contains the single threaded driver loading code, to be used on
|
||||
// low performance cores.
|
||||
|
||||
// +build tinygo
|
||||
|
||||
package periph
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func initImpl() (*State, error) {
|
||||
state = &State{}
|
||||
// At this point, byName is guaranteed to be immutable.
|
||||
stages, err := explodeStages()
|
||||
if err != nil {
|
||||
return state, err
|
||||
}
|
||||
loaded := make(map[string]struct{}, len(byName))
|
||||
for _, s := range stages {
|
||||
s.loadSerial(state, loaded)
|
||||
}
|
||||
return state, nil
|
||||
}
|
||||
|
||||
// loadSerial loads all the drivers for this stage, one after the other.
|
||||
func (s *stage) loadSerial(state *State, loaded map[string]struct{}) {
|
||||
for name, drv := range s.drvs {
|
||||
// Intentionally do not look at After(), only Prerequisites().
|
||||
for _, dep := range drv.Prerequisites() {
|
||||
if _, ok := loaded[dep]; !ok {
|
||||
state.Skipped = insertDriverFailure(state.Skipped, DriverFailure{drv, errors.New("dependency not loaded: " + strconv.Quote(dep))})
|
||||
goto loop
|
||||
}
|
||||
}
|
||||
|
||||
// Not skipped driver, attempt loading in a goroutine.
|
||||
if ok, err := drv.Init(); ok {
|
||||
if err == nil {
|
||||
state.Loaded = insertDriver(state.Loaded, drv)
|
||||
loaded[name] = struct{}{}
|
||||
} else {
|
||||
state.Failed = insertDriverFailure(state.Failed, DriverFailure{drv, err})
|
||||
}
|
||||
} else {
|
||||
state.Skipped = insertDriverFailure(state.Skipped, DriverFailure{drv, err})
|
||||
}
|
||||
loop:
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user