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/06 02:27:58 UTC

[53/54] incubator-mynewt-newtmgr git commit: nmxact - conn_find

nmxact - conn_find


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/e94d645a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/tree/e94d645a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/diff/e94d645a

Branch: refs/heads/master
Commit: e94d645a8d76b4dae829c1aa2706c78cd38c7709
Parents: 06c80b7
Author: Christopher Collins <cc...@apache.org>
Authored: Wed Apr 5 19:09:32 2017 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Wed Apr 5 19:09:32 2017 -0700

----------------------------------------------------------------------
 nmxact/bledefs/bledefs.go | 12 +++++++
 nmxact/nmble/ble_act.go   | 51 +++++++++++++++++++++++++++-
 nmxact/nmble/ble_fsm.go   | 31 +++++++++++++----
 nmxact/nmble/ble_proto.go | 76 ++++++++++++++++++++++++++++--------------
 nmxact/nmble/ble_util.go  |  8 +++++
 nmxact/nmble/ble_xport.go | 20 +++++++++++
 nmxact/nmble/dispatch.go  |  2 ++
 7 files changed, 168 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e94d645a/nmxact/bledefs/bledefs.go
----------------------------------------------------------------------
diff --git a/nmxact/bledefs/bledefs.go b/nmxact/bledefs/bledefs.go
index 3bb2772..570ddb0 100644
--- a/nmxact/bledefs/bledefs.go
+++ b/nmxact/bledefs/bledefs.go
@@ -268,3 +268,15 @@ type BleAdvReport struct {
 }
 
 type BleAdvPredicate func(adv BleAdvReport) bool
+
+type BleConnDesc struct {
+	ConnHandle      uint16
+	OwnIdAddrType   BleAddrType
+	OwnIdAddr       BleAddr
+	OwnOtaAddrType  BleAddrType
+	OwnOtaAddr      BleAddr
+	PeerIdAddrType  BleAddrType
+	PeerIdAddr      BleAddr
+	PeerOtaAddrType BleAddrType
+	PeerOtaAddr     BleAddr
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e94d645a/nmxact/nmble/ble_act.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_act.go b/nmxact/nmble/ble_act.go
index ff6dff9..7cd05a8 100644
--- a/nmxact/nmble/ble_act.go
+++ b/nmxact/nmble/ble_act.go
@@ -276,7 +276,7 @@ func exchangeMtu(x *BleXport, bl *BleListener, r *BleExchangeMtuReq) (
 						MSG_TYPE_MTU_CHANGE_EVT,
 						msg.Status)
 				} else {
-					return msg.Mtu, nil
+					return int(msg.Mtu), nil
 				}
 
 			default:
@@ -363,6 +363,55 @@ func scanCancel(x *BleXport, bl *BleListener, r *BleScanCancelReq) error {
 	}
 }
 
+func connFind(x *BleXport, bl *BleListener, r *BleConnFindReq) (
+	BleConnDesc, error) {
+
+	const msgType = MSG_TYPE_CONN_FIND
+
+	j, err := json.Marshal(r)
+	if err != nil {
+		return BleConnDesc{}, err
+	}
+
+	if err := x.Tx(j); err != nil {
+		return BleConnDesc{}, err
+	}
+
+	for {
+		select {
+		case err := <-bl.ErrChan:
+			return BleConnDesc{}, err
+
+		case bm := <-bl.BleChan:
+			switch msg := bm.(type) {
+			case *BleConnFindRsp:
+				bl.Acked = true
+				if msg.Status != 0 {
+					return BleConnDesc{},
+						StatusError(MSG_OP_RSP, msgType, msg.Status)
+				}
+
+				return BleConnDesc{
+					ConnHandle:      msg.ConnHandle,
+					OwnIdAddrType:   msg.OwnIdAddrType,
+					OwnIdAddr:       msg.OwnIdAddr,
+					OwnOtaAddrType:  msg.OwnOtaAddrType,
+					OwnOtaAddr:      msg.OwnOtaAddr,
+					PeerIdAddrType:  msg.PeerIdAddrType,
+					PeerIdAddr:      msg.PeerIdAddr,
+					PeerOtaAddrType: msg.PeerOtaAddrType,
+					PeerOtaAddr:     msg.PeerOtaAddr,
+				}, nil
+
+			default:
+			}
+
+		case <-bl.AfterTimeout(x.RspTimeout()):
+			return BleConnDesc{}, BhdTimeoutError(msgType)
+		}
+	}
+}
+
 // 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/e94d645a/nmxact/nmble/ble_fsm.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_fsm.go b/nmxact/nmble/ble_fsm.go
index dc94ca9..8c374b8 100644
--- a/nmxact/nmble/ble_fsm.go
+++ b/nmxact/nmble/ble_fsm.go
@@ -60,7 +60,7 @@ type BleFsm struct {
 	params BleFsmParams
 
 	peerDev         *BleDev
-	connHandle      int
+	connHandle      uint16
 	nmpSvc          *BleSvc
 	nmpReqChr       *BleChr
 	nmpRspChr       *BleChr
@@ -203,6 +203,27 @@ func (bf *BleFsm) action(
 	return nil
 }
 
+func (bf *BleFsm) logConnection() {
+	desc, err := bf.params.Bx.connFind(bf.connHandle)
+	if err != nil {
+		return
+	}
+
+	log.Debugf("BLE connection attempt succeeded; "+
+		"conn_handle=%d "+
+		"own_id_addr=%s,%s own_ota_addr=%s,%s "+
+		"peer_id_addr=%s,%s peer_ota_addr=%s,%s",
+		desc.ConnHandle,
+		BleAddrTypeToString(desc.OwnIdAddrType),
+		desc.OwnIdAddr.String(),
+		BleAddrTypeToString(desc.OwnOtaAddrType),
+		desc.OwnOtaAddr.String(),
+		BleAddrTypeToString(desc.PeerIdAddrType),
+		desc.PeerIdAddr.String(),
+		BleAddrTypeToString(desc.PeerOtaAddrType),
+		desc.PeerOtaAddr.String())
+}
+
 func calcDisconnectType(state BleSesnState) BleFsmDisconnectType {
 	switch state {
 	case SESN_STATE_EXCHANGING_MTU:
@@ -282,10 +303,8 @@ func (bf *BleFsm) connectListen(seq BleSeq) error {
 				case *BleConnectEvt:
 					if msg.Status == 0 {
 						bl.Acked = true
-						log.Debugf("BLE connection attempt succeeded; "+
-							"peer=%d handle=%d", bf.peerDev.String(),
-							msg.ConnHandle)
 						bf.connHandle = msg.ConnHandle
+						bf.logConnection()
 						if err := bf.nmpRspListen(); err != nil {
 							bf.connChan <- err
 							return
@@ -310,7 +329,7 @@ func (bf *BleFsm) connectListen(seq BleSeq) error {
 					} else {
 						log.Debugf("BLE ATT MTU updated; from=%d to=%d",
 							bf.attMtu, msg.Mtu)
-						bf.attMtu = msg.Mtu
+						bf.attMtu = int(msg.Mtu)
 					}
 
 				case *BleDisconnectEvt:
@@ -334,7 +353,7 @@ func (bf *BleFsm) nmpRspListen() error {
 		Op:         MSG_OP_EVT,
 		Type:       MSG_TYPE_NOTIFY_RX_EVT,
 		Seq:        BLE_SEQ_NONE,
-		ConnHandle: bf.connHandle,
+		ConnHandle: int(bf.connHandle),
 	}
 
 	bl, err := bf.addBleListener(base)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e94d645a/nmxact/nmble/ble_proto.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_proto.go b/nmxact/nmble/ble_proto.go
index 41afd51..f955fab 100644
--- a/nmxact/nmble/ble_proto.go
+++ b/nmxact/nmble/ble_proto.go
@@ -233,6 +233,8 @@ const (
 	MSG_TYPE_SCAN                      = 15
 	MSG_TYPE_SCAN_CANCEL               = 16
 	MSG_TYPE_SET_PREFERRED_MTU         = 17
+	MSG_TYPE_SECURITY_INITIATE         = 18
+	MSG_TYPE_CONN_FIND                 = 19
 
 	MSG_TYPE_SYNC_EVT       = 2049
 	MSG_TYPE_CONNECT_EVT    = 2050
@@ -243,6 +245,7 @@ const (
 	MSG_TYPE_NOTIFY_RX_EVT  = 2055
 	MSG_TYPE_MTU_CHANGE_EVT = 2056
 	MSG_TYPE_SCAN_EVT       = 2057
+	MSG_TYPE_ENC_CHANGE_EVT = 2058
 )
 
 var MsgOpStringMap = map[MsgOp]string{
@@ -267,6 +270,7 @@ var MsgTypeStringMap = map[MsgType]string{
 	MSG_TYPE_SCAN:              "scan",
 	MSG_TYPE_SCAN_CANCEL:       "scan_cancel",
 	MSG_TYPE_SET_PREFERRED_MTU: "set_preferred_mtu",
+	MSG_TYPE_CONN_FIND:         "conn_find",
 
 	MSG_TYPE_SYNC_EVT:       "sync_evt",
 	MSG_TYPE_CONNECT_EVT:    "connect_evt",
@@ -276,6 +280,7 @@ var MsgTypeStringMap = map[MsgType]string{
 	MSG_TYPE_NOTIFY_RX_EVT:  "notify_rx_evt",
 	MSG_TYPE_MTU_CHANGE_EVT: "mtu_change_evt",
 	MSG_TYPE_SCAN_EVT:       "scan_evt",
+	MSG_TYPE_ENC_CHANGE_EVT: "enc_change_evt",
 }
 
 type BleHdr struct {
@@ -346,16 +351,8 @@ type BleConnectEvt struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	Status          int         `json:"status"`
-	ConnHandle      int         `json:"conn_handle"`
-	OwnIdAddrType   BleAddrType `json:"own_id_addr_type"`
-	OwnIdAddr       BleAddr     `json:"own_id_addr"`
-	OwnOtaAddrType  BleAddrType `json:"own_ota_addr_type"`
-	OwnOtaAddr      BleAddr     `json:"own_ota_addr"`
-	PeerIdAddrType  BleAddrType `json:"peer_id_addr_type"`
-	PeerIdAddr      BleAddr     `json:"peer_id_addr"`
-	PeerOtaAddrType BleAddrType `json:"peer_ota_addr_type"`
-	PeerOtaAddr     BleAddr     `json:"peer_ota_addr"`
+	Status     int    `json:"status"`
+	ConnHandle uint16 `json:"conn_handle"`
 }
 
 type BleTerminateReq struct {
@@ -364,8 +361,8 @@ type BleTerminateReq struct {
 	Type MsgType `json:"type"`
 	Seq  BleSeq  `json:"seq"`
 
-	ConnHandle int `json:"conn_handle"`
-	HciReason  int `json:"hci_reason"`
+	ConnHandle uint16 `json:"conn_handle"`
+	HciReason  int    `json:"hci_reason"`
 }
 
 type BleTerminateRsp struct {
@@ -402,8 +399,8 @@ type BleDisconnectEvt struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	Reason     int `json:"reason"`
-	ConnHandle int `json:"conn_handle"`
+	Reason     int    `json:"reason"`
+	ConnHandle uint16 `json:"conn_handle"`
 }
 
 type BleDiscSvcUuidReq struct {
@@ -413,7 +410,7 @@ type BleDiscSvcUuidReq struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	ConnHandle int     `json:"conn_handle"`
+	ConnHandle uint16  `json:"conn_handle"`
 	Uuid       BleUuid `json:"svc_uuid"`
 }
 
@@ -445,7 +442,7 @@ type BleDiscChrUuidReq struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	ConnHandle  int     `json:"conn_handle"`
+	ConnHandle  uint16  `json:"conn_handle"`
 	StartHandle int     `json:"start_handle"`
 	EndHandle   int     `json:"end_handle"`
 	Uuid        BleUuid `json:"chr_uuid"`
@@ -458,9 +455,9 @@ type BleDiscAllChrsReq struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	ConnHandle  int `json:"conn_handle"`
-	StartHandle int `json:"start_handle"`
-	EndHandle   int `json:"end_handle"`
+	ConnHandle  uint16 `json:"conn_handle"`
+	StartHandle int    `json:"start_handle"`
+	EndHandle   int    `json:"end_handle"`
 }
 
 type BleDiscAllChrsRsp struct {
@@ -522,7 +519,7 @@ type BleWriteCmdReq struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	ConnHandle int      `json:"conn_handle"`
+	ConnHandle uint16   `json:"conn_handle"`
 	AttrHandle int      `json:"attr_handle"`
 	Data       BleBytes `json:"data"`
 }
@@ -554,7 +551,7 @@ type BleNotifyRxEvt struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	ConnHandle int      `json:"conn_handle"`
+	ConnHandle uint16   `json:"conn_handle"`
 	AttrHandle int      `json:"attr_handle"`
 	Indication bool     `json:"indication"`
 	Data       BleBytes `json:"data"`
@@ -567,7 +564,7 @@ type BleExchangeMtuReq struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	ConnHandle int `json:"conn_handle"`
+	ConnHandle uint16 `json:"conn_handle"`
 }
 
 type BleExchangeMtuRsp struct {
@@ -587,9 +584,9 @@ type BleMtuChangeEvt struct {
 	Seq  BleSeq  `json:"seq"`
 
 	// Mandatory
-	Status     int `json:"status"`
-	ConnHandle int `json:"conn_handle"`
-	Mtu        int `json:"mtu"`
+	Status     int    `json:"status"`
+	ConnHandle uint16 `json:"conn_handle"`
+	Mtu        uint16 `json:"mtu"`
 }
 
 type BleGenRandAddrReq struct {
@@ -716,6 +713,35 @@ type BleSetPreferredMtuRsp struct {
 	Status int `json:"status"`
 }
 
+type BleConnFindReq struct {
+	// Header
+	Op   MsgOp   `json:"op"`
+	Type MsgType `json:"type"`
+	Seq  BleSeq  `json:"seq"`
+
+	// Mandatory
+	ConnHandle uint16 `json:"conn_handle"`
+}
+
+type BleConnFindRsp struct {
+	// Header
+	Op   MsgOp   `json:"op"`
+	Type MsgType `json:"type"`
+	Seq  BleSeq  `json:"seq"`
+
+	// Mandatory
+	Status          int         `json:"status"`
+	ConnHandle      uint16      `json:"conn_handle"`
+	OwnIdAddrType   BleAddrType `json:"own_id_addr_type"`
+	OwnIdAddr       BleAddr     `json:"own_id_addr"`
+	OwnOtaAddrType  BleAddrType `json:"own_ota_addr_type"`
+	OwnOtaAddr      BleAddr     `json:"own_ota_addr"`
+	PeerIdAddrType  BleAddrType `json:"peer_id_addr_type"`
+	PeerIdAddr      BleAddr     `json:"peer_id_addr"`
+	PeerOtaAddrType BleAddrType `json:"peer_ota_addr_type"`
+	PeerOtaAddr     BleAddr     `json:"peer_ota_addr"`
+}
+
 func ErrCodeToString(e int) string {
 	var s string
 

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e94d645a/nmxact/nmble/ble_util.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_util.go b/nmxact/nmble/ble_util.go
index a61618f..57bc324 100644
--- a/nmxact/nmble/ble_util.go
+++ b/nmxact/nmble/ble_util.go
@@ -196,3 +196,11 @@ func NewBleSetPreferredMtuReq() *BleSetPreferredMtuReq {
 		Seq:  NextSeq(),
 	}
 }
+
+func NewBleConnFindReq() *BleConnFindReq {
+	return &BleConnFindReq{
+		Op:   MSG_OP_REQ,
+		Type: MSG_TYPE_CONN_FIND,
+		Seq:  NextSeq(),
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e94d645a/nmxact/nmble/ble_xport.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/ble_xport.go b/nmxact/nmble/ble_xport.go
index 4f44577..e575d78 100644
--- a/nmxact/nmble/ble_xport.go
+++ b/nmxact/nmble/ble_xport.go
@@ -138,6 +138,26 @@ func (bx *BleXport) genRandAddr() (BleAddr, error) {
 	return genRandAddr(bx, bl, r)
 }
 
+func (bx *BleXport) connFind(connHandle uint16) (BleConnDesc, error) {
+	r := NewBleConnFindReq()
+	r.ConnHandle = connHandle
+
+	base := BleMsgBase{
+		Op:         -1,
+		Type:       -1,
+		Seq:        r.Seq,
+		ConnHandle: -1,
+	}
+
+	bl := NewBleListener()
+	if err := bx.Bd.AddListener(base, bl); err != nil {
+		return BleConnDesc{}, err
+	}
+	defer bx.Bd.RemoveListener(base)
+
+	return connFind(bx, bl, r)
+}
+
 func (bx *BleXport) setRandAddr(addr BleAddr) error {
 	r := NewBleSetRandAddrReq()
 	r.Addr = addr

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/e94d645a/nmxact/nmble/dispatch.go
----------------------------------------------------------------------
diff --git a/nmxact/nmble/dispatch.go b/nmxact/nmble/dispatch.go
index 06d2847..40ec8f2 100644
--- a/nmxact/nmble/dispatch.go
+++ b/nmxact/nmble/dispatch.go
@@ -99,6 +99,7 @@ func connCancelRspCtor() BleMsg      { return &BleConnCancelRsp{} }
 func scanRspCtor() BleMsg            { return &BleScanRsp{} }
 func scanCancelRspCtor() BleMsg      { return &BleScanCancelRsp{} }
 func setPreferredMtuRspCtor() BleMsg { return &BleSetPreferredMtuRsp{} }
+func connFindRspCtor() BleMsg        { return &BleConnFindRsp{} }
 
 func syncEvtCtor() BleMsg       { return &BleSyncEvt{} }
 func connectEvtCtor() BleMsg    { return &BleConnectEvt{} }
@@ -125,6 +126,7 @@ var msgCtorMap = map[OpTypePair]msgCtor{
 	{MSG_OP_RSP, MSG_TYPE_SCAN}:              scanRspCtor,
 	{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_EVT, MSG_TYPE_SYNC_EVT}:       syncEvtCtor,
 	{MSG_OP_EVT, MSG_TYPE_CONNECT_EVT}:    connectEvtCtor,