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,