You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2017/04/04 02:36:43 UTC
[2/2] incubator-mynewt-newtmgr git commit: newtmgr - revendor
newtmgr - revendor
Project: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/commit/ad32cdd3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/tree/ad32cdd3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/diff/ad32cdd3
Branch: refs/heads/master
Commit: ad32cdd3d907be0a6ae92320052d4c2037b8a6aa
Parents: 3cdf50d
Author: Christopher Collins <cc...@apache.org>
Authored: Mon Apr 3 19:29:10 2017 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Mon Apr 3 19:35:54 2017 -0700
----------------------------------------------------------------------
newtmgr/Godeps/Godeps.json | 52 ++++++------
.../newtmgr/nmxact/nmble/ble_xport.go | 86 +++++++++++++++-----
2 files changed, 93 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/ad32cdd3/newtmgr/Godeps/Godeps.json
----------------------------------------------------------------------
diff --git a/newtmgr/Godeps/Godeps.json b/newtmgr/Godeps/Godeps.json
index 22eb507..dec9341 100644
--- a/newtmgr/Godeps/Godeps.json
+++ b/newtmgr/Godeps/Godeps.json
@@ -76,68 +76,68 @@
},
{
"ImportPath": "mynewt.apache.org/newt/util",
- "Comment": "mynewt_1_0_0_b1_tag-159-g66f1181",
- "Rev": "66f118133159619cf027c8e9907173b6860c106e"
+ "Comment": "mynewt_1_0_0_b1_tag-159-g9de7460",
+ "Rev": "9de7460f1fc510d724a507692abcd8e45f9e5f02"
},
{
"ImportPath": "mynewt.apache.org/newt/util/unixchild",
- "Comment": "mynewt_1_0_0_b1_tag-159-g66f1181",
- "Rev": "66f118133159619cf027c8e9907173b6860c106e"
+ "Comment": "mynewt_1_0_0_b1_tag-159-g9de7460",
+ "Rev": "9de7460f1fc510d724a507692abcd8e45f9e5f02"
},
{
"ImportPath": "mynewt.apache.org/newt/viper",
- "Comment": "mynewt_1_0_0_b1_tag-159-g66f1181",
- "Rev": "66f118133159619cf027c8e9907173b6860c106e"
+ "Comment": "mynewt_1_0_0_b1_tag-159-g9de7460",
+ "Rev": "9de7460f1fc510d724a507692abcd8e45f9e5f02"
},
{
"ImportPath": "mynewt.apache.org/newt/yaml",
- "Comment": "mynewt_1_0_0_b1_tag-159-g66f1181",
- "Rev": "66f118133159619cf027c8e9907173b6860c106e"
+ "Comment": "mynewt_1_0_0_b1_tag-159-g9de7460",
+ "Rev": "9de7460f1fc510d724a507692abcd8e45f9e5f02"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/bledefs",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/nmble",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/nmp",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/nmserial",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/nmxutil",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/omp",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/sesn",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/xact",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
},
{
"ImportPath": "mynewt.apache.org/newtmgr/nmxact/xport",
- "Comment": "mynewt_0_9_0_tag-454-gd3462c4",
- "Rev": "d3462c4a6b00592a47e39b0bee3935e94a287038"
+ "Comment": "mynewt_0_9_0_tag-456-gb056251",
+ "Rev": "b05625178026773b707953f73d54a1963d186959"
}
]
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/ad32cdd3/newtmgr/vendor/mynewt.apache.org/newtmgr/nmxact/nmble/ble_xport.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/mynewt.apache.org/newtmgr/nmxact/nmble/ble_xport.go b/newtmgr/vendor/mynewt.apache.org/newtmgr/nmxact/nmble/ble_xport.go
index 32ced04..02854c6 100644
--- a/newtmgr/vendor/mynewt.apache.org/newtmgr/nmxact/nmble/ble_xport.go
+++ b/newtmgr/vendor/mynewt.apache.org/newtmgr/nmxact/nmble/ble_xport.go
@@ -4,7 +4,7 @@ import (
"encoding/hex"
"encoding/json"
"fmt"
- "sync/atomic"
+ "sync"
"time"
log "github.com/Sirupsen/logrus"
@@ -47,10 +47,11 @@ func NewXportCfg() XportCfg {
}
}
-type BleXportState uint32
+type BleXportState int
const (
- BLE_XPORT_STATE_STOPPED BleXportState = iota
+ BLE_XPORT_STATE_DORMANT BleXportState = iota
+ BLE_XPORT_STATE_STOPPED
BLE_XPORT_STATE_STARTING
BLE_XPORT_STATE_STARTED
BLE_XPORT_STATE_STOPPING
@@ -58,12 +59,15 @@ const (
// Implements xport.Xport.
type BleXport struct {
- Bd *BleDispatcher
- client *unixchild.Client
- state BleXportState
- stopChan chan struct{}
- shutdownChan chan bool
- numStopListeners int
+ Bd *BleDispatcher
+ client *unixchild.Client
+ state BleXportState
+ stopChan chan struct{}
+ numStopListeners int
+ shutdownChan chan bool
+ readyChan chan error
+ numReadyListeners int
+ mtx sync.Mutex
cfg XportCfg
}
@@ -224,14 +228,53 @@ func (bx *BleXport) shutdown(restart bool, err error) {
}
}
-func (bx *BleXport) setStateFrom(from BleXportState, to BleXportState) bool {
- return atomic.CompareAndSwapUint32(
- (*uint32)(&bx.state), uint32(from), uint32(to))
+func (bx *BleXport) blockUntilReady() error {
+ bx.mtx.Lock()
+ switch bx.state {
+ case BLE_XPORT_STATE_STARTED:
+ // Already started; don't block.
+ bx.mtx.Unlock()
+ return nil
+
+ case BLE_XPORT_STATE_DORMANT:
+ // Not in the process of starting; the user will be waiting forever.
+ bx.mtx.Unlock()
+ return fmt.Errorf("Attempt to use BLE transport without starting it")
+
+ default:
+ }
+
+ bx.numReadyListeners++
+ bx.mtx.Unlock()
+
+ return <-bx.readyChan
}
-func (bx *BleXport) getState() BleXportState {
- u32 := atomic.LoadUint32((*uint32)(&bx.state))
- return BleXportState(u32)
+func (bx *BleXport) notifyReadyListeners(err error) {
+ for i := 0; i < bx.numReadyListeners; i++ {
+ bx.readyChan <- err
+ }
+ bx.numReadyListeners = 0
+}
+
+func (bx *BleXport) setStateFrom(from BleXportState, to BleXportState) bool {
+ bx.mtx.Lock()
+ defer bx.mtx.Unlock()
+
+ if bx.state != from {
+ return false
+ }
+
+ bx.state = to
+ switch bx.state {
+ case BLE_XPORT_STATE_STARTED:
+ bx.notifyReadyListeners(nil)
+ case BLE_XPORT_STATE_STOPPED:
+ bx.notifyReadyListeners(fmt.Errorf("BLE transport stopped"))
+ default:
+ }
+
+ return true
}
func (bx *BleXport) Stop() error {
@@ -356,9 +399,14 @@ func (bx *BleXport) startOnce() error {
}
func (bx *BleXport) Start() error {
+ if !bx.setStateFrom(BLE_XPORT_STATE_DORMANT, BLE_XPORT_STATE_STOPPED) {
+ return nmxutil.NewXportError("BLE xport started twice")
+ }
+
// Try to start the transport. If this first attempt fails, report the
// error and don't retry.
if err := bx.startOnce(); err != nil {
+ bx.setStateFrom(BLE_XPORT_STATE_STOPPED, BLE_XPORT_STATE_DORMANT)
log.Debugf("Error starting BLE transport: %s",
err.Error())
return err
@@ -374,6 +422,8 @@ func (bx *BleXport) Start() error {
// explicit stop call (instead of an unexpected error), stop
// restarting the transport.
if !bx.cfg.BlehostdRestart || !restart {
+ bx.setStateFrom(BLE_XPORT_STATE_STOPPED,
+ BLE_XPORT_STATE_DORMANT)
break
}
@@ -402,10 +452,8 @@ func (bx *BleXport) txNoSync(data []byte) {
}
func (bx *BleXport) Tx(data []byte) error {
- if bx.getState() != BLE_XPORT_STATE_STARTED {
- return nmxutil.NewXportError(
- fmt.Sprintf("Attempt to transmit before BLE xport fully started; "+
- "state=%d", bx.getState()))
+ if err := bx.blockUntilReady(); err != nil {
+ return err
}
bx.txNoSync(data)