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/05/11 00:34:20 UTC
[2/2] incubator-mynewt-newtmgr git commit: nmxact - reset ctlr on
ble_xport shutdown.
nmxact - reset ctlr on ble_xport shutdown.
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/8c186383
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/tree/8c186383
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/diff/8c186383
Branch: refs/heads/master
Commit: 8c1863838b37abdc80d01fc09c294b453619c6a6
Parents: 97e9dfb
Author: Christopher Collins <cc...@apache.org>
Authored: Wed May 10 17:33:50 2017 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Wed May 10 17:33:50 2017 -0700
----------------------------------------------------------------------
nmxact/nmble/ble_act.go | 32 ++++++++++++++++++++++++++++++++
nmxact/nmble/ble_proto.go | 16 ++++++++++++++++
nmxact/nmble/ble_util.go | 27 +++++++++++++++++++++++++++
nmxact/nmble/ble_xport.go | 7 ++++++-
nmxact/nmble/dispatch.go | 2 ++
nmxact/nmxutil/nmxutil.go | 10 ++++++++++
6 files changed, 93 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/8c186383/nmxact/nmble/ble_act.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_act.go b/nmxact/nmble/ble_act.go
index ad3a648..4c5eef0 100644
--- a/nmxact/nmble/ble_act.go
+++ b/nmxact/nmble/ble_act.go
@@ -411,6 +411,38 @@ func connFind(x *BleXport, bl *BleListener, r *BleConnFindReq) (
}
}
+// Tells the host to reset the controller.
+func reset(x *BleXport, bl *BleListener,
+ r *BleResetReq) error {
+
+ const rspType = MSG_TYPE_RESET
+
+ j, err := json.Marshal(r)
+ if err != nil {
+ return err
+ }
+
+ x.txNoSync(j)
+ for {
+ select {
+ case err := <-bl.ErrChan:
+ return err
+
+ case bm := <-bl.BleChan:
+ switch bm.(type) {
+ case *BleResetRsp:
+ bl.Acked = true
+ return nil
+
+ default:
+ }
+
+ case <-bl.AfterTimeout(x.RspTimeout()):
+ return BhdTimeoutError(rspType, r.Seq)
+ }
+ }
+}
+
// Asks the controller to generate a random address. This is done when the
// transport is starting up, and therefore does not require the transport to be
// synced. Only the transport should call this function.
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/8c186383/nmxact/nmble/ble_proto.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_proto.go b/nmxact/nmble/ble_proto.go
index d2976d0..0bb4d01 100644
--- a/nmxact/nmble/ble_proto.go
+++ b/nmxact/nmble/ble_proto.go
@@ -233,6 +233,7 @@ const (
MSG_TYPE_SET_PREFERRED_MTU = 17
MSG_TYPE_SECURITY_INITIATE = 18
MSG_TYPE_CONN_FIND = 19
+ MSG_TYPE_RESET = 20
MSG_TYPE_SYNC_EVT = 2049
MSG_TYPE_CONNECT_EVT = 2050
@@ -270,6 +271,7 @@ var MsgTypeStringMap = map[MsgType]string{
MSG_TYPE_SCAN_CANCEL: "scan_cancel",
MSG_TYPE_SET_PREFERRED_MTU: "set_preferred_mtu",
MSG_TYPE_CONN_FIND: "conn_find",
+ MSG_TYPE_RESET: "reset",
MSG_TYPE_SYNC_EVT: "sync_evt",
MSG_TYPE_CONNECT_EVT: "connect_evt",
@@ -770,6 +772,20 @@ type BleConnFindRsp struct {
PeerOtaAddr BleAddr `json:"peer_ota_addr"`
}
+type BleResetReq struct {
+ // Header
+ Op MsgOp `json:"op"`
+ Type MsgType `json:"type"`
+ Seq BleSeq `json:"seq"`
+}
+
+type BleResetRsp struct {
+ // Header
+ Op MsgOp `json:"op"`
+ Type MsgType `json:"type"`
+ Seq BleSeq `json:"seq"`
+}
+
func ErrCodeToString(e int) string {
var s string
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/8c186383/nmxact/nmble/ble_util.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_util.go b/nmxact/nmble/ble_util.go
index cc9409b..13a2b8c 100644
--- a/nmxact/nmble/ble_util.go
+++ b/nmxact/nmble/ble_util.go
@@ -243,6 +243,14 @@ func NewBleConnFindReq() *BleConnFindReq {
}
}
+func NewResetReq() *BleResetReq {
+ return &BleResetReq{
+ Op: MSG_OP_REQ,
+ Type: MSG_TYPE_RESET,
+ Seq: NextSeq(),
+ }
+}
+
func ConnFindXact(x *BleXport, connHandle uint16) (BleConnDesc, error) {
r := NewBleConnFindReq()
r.ConnHandle = connHandle
@@ -320,3 +328,22 @@ func SetPreferredMtuXact(x *BleXport, mtu uint16) error {
return setPreferredMtu(x, bl, r)
}
+
+func ResetXact(x *BleXport) error {
+ r := NewResetReq()
+
+ base := BleMsgBase{
+ Op: -1,
+ Type: -1,
+ Seq: r.Seq,
+ ConnHandle: -1,
+ }
+
+ bl := NewBleListener()
+ if err := x.Bd.AddListener(base, bl); err != nil {
+ return err
+ }
+ defer x.Bd.RemoveListener(base)
+
+ return reset(x, bl, r)
+}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/8c186383/nmxact/nmble/ble_xport.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_xport.go b/nmxact/nmble/ble_xport.go
index e7a495f..091b607 100644
--- a/nmxact/nmble/ble_xport.go
+++ b/nmxact/nmble/ble_xport.go
@@ -322,7 +322,12 @@ func (bx *BleXport) setStateFrom(from BleXportState, to BleXportState) bool {
}
func (bx *BleXport) Stop() error {
- // XXX: Reset controller to terminate all connections.
+ synced, err := bx.querySyncStatus()
+ if err == nil && synced {
+ // Reset controller so that all outstanding connections terminate.
+ ResetXact(bx)
+ }
+
bx.shutdown(false, nmxutil.NewXportError("xport stopped"))
return nil
}
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/8c186383/nmxact/nmble/dispatch.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/dispatch.go b/nmxact/nmble/dispatch.go
index 83f1f0f..c9f17ec 100644
--- a/nmxact/nmble/dispatch.go
+++ b/nmxact/nmble/dispatch.go
@@ -100,6 +100,7 @@ func scanRspCtor() BleMsg { return &BleScanRsp{} }
func scanCancelRspCtor() BleMsg { return &BleScanCancelRsp{} }
func setPreferredMtuRspCtor() BleMsg { return &BleSetPreferredMtuRsp{} }
func connFindRspCtor() BleMsg { return &BleConnFindRsp{} }
+func resetRspCtor() BleMsg { return &BleResetRsp{} }
func syncEvtCtor() BleMsg { return &BleSyncEvt{} }
func connectEvtCtor() BleMsg { return &BleConnectEvt{} }
@@ -128,6 +129,7 @@ var msgCtorMap = map[OpTypePair]msgCtor{
{MSG_OP_RSP, MSG_TYPE_SCAN_CANCEL}: scanCancelRspCtor,
{MSG_OP_RSP, MSG_TYPE_SET_PREFERRED_MTU}: setPreferredMtuRspCtor,
{MSG_OP_RSP, MSG_TYPE_CONN_FIND}: connFindRspCtor,
+ {MSG_OP_RSP, MSG_TYPE_RESET}: resetRspCtor,
{MSG_OP_EVT, MSG_TYPE_SYNC_EVT}: syncEvtCtor,
{MSG_OP_EVT, MSG_TYPE_CONNECT_EVT}: connectEvtCtor,
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/8c186383/nmxact/nmxutil/nmxutil.go
----------------------------------------------------------------------
diff --git a/nmxact/nmxutil/nmxutil.go b/nmxact/nmxutil/nmxutil.go
index 707b1bc..75ce988 100644
--- a/nmxact/nmxutil/nmxutil.go
+++ b/nmxact/nmxutil/nmxutil.go
@@ -173,6 +173,16 @@ func (f *ErrFunnel) Reset() {
}
}
+func (f *ErrFunnel) BlockUntilExp() {
+ f.mtx.Lock()
+ defer f.mtx.Unlock()
+
+ if f.started {
+ f.resetMtx.Lock()
+ f.resetMtx.Unlock()
+ }
+}
+
func (f *ErrFunnel) timerExp() {
f.mtx.Lock()
err := f.curErr