newtmgr: Add hci option for Linux 106/head
authorŁukasz Rymanowski <lukasz.rymanowski@codecoup.pl>
Fri, 28 Sep 2018 09:13:23 +0000 (11:13 +0200)
committerŁukasz Rymanowski <lukasz.rymanowski@codecoup.pl>
Wed, 3 Oct 2018 08:57:05 +0000 (10:57 +0200)
`hci` option allows to provide the controller index which should be
used for newtmgr operations.

Shorter version is -i

newtmgr/bll/bll_xport.go
newtmgr/bll/bll_xport_linux.go
newtmgr/cli/commands.go
newtmgr/cli/common.go
newtmgr/config/ble_config.go
newtmgr/config/bll_config.go
newtmgr/nmutil/nmutil.go

index 06c9b33..ea03994 100644 (file)
@@ -23,10 +23,8 @@ package bll
 
 import (
        "fmt"
-
        "github.com/go-ble/ble"
        "github.com/go-ble/ble/examples/lib/dev"
-
        "mynewt.apache.org/newtmgr/nmxact/bledefs"
        "mynewt.apache.org/newtmgr/nmxact/sesn"
 )
@@ -44,11 +42,13 @@ func NewXportCfg() XportCfg {
 
 type BllXport struct {
        cfg XportCfg
+       hciIdx  int
 }
 
-func NewBllXport(cfg XportCfg) *BllXport {
+func NewBllXport(cfg XportCfg, hciIdx int) *BllXport {
        return &BllXport{
                cfg: cfg,
+               hciIdx: hciIdx,
        }
 }
 
@@ -62,9 +62,9 @@ func (bx *BllXport) BuildBllSesn(cfg BllSesnCfg) (sesn.Sesn, error) {
 }
 
 func (bx *BllXport) Start() error {
-       d, err := dev.NewDevice(bx.cfg.CtlrName)
+       d, err := dev.NewDevice(bx.cfg.CtlrName, ble.OptDeviceID(bx.hciIdx))
        if err != nil {
-               return err
+               return fmt.Errorf("[hci%d]: %s", bx.hciIdx, err)
        }
 
        // Set the connection parameters to use for all initiated connections.
index a4174ec..e9162fd 100644 (file)
@@ -24,7 +24,6 @@ package bll
 import (
        "github.com/go-ble/ble"
        "github.com/go-ble/ble/linux"
-       "github.com/go-ble/ble/linux/hci"
        "github.com/go-ble/ble/linux/hci/cmd"
 
        "mynewt.apache.org/newt/util"
@@ -51,7 +50,7 @@ func BllXportSetConnParams(dev ble.Device, ownAddrType bledefs.BleAddrType) erro
                PeerAddress:     [6]byte{}, //
        }
 
-       opt := hci.OptConnParams(cc)
+       opt := ble.OptConnParams(cc)
        if err := ldev.HCI.Option(opt); err != nil {
                return util.FmtNewtError("error setting connection parameters: %s",
                        err.Error())
index 0c30c5b..5bfebbe 100644 (file)
@@ -95,6 +95,9 @@ func Commands() *cobra.Command {
        }
        nmCmd.AddCommand(versCmd)
 
+       nmCmd.PersistentFlags().IntVarP(&nmutil.HciIdx, "hci", "i",
+               0, "HCI index for the controller on Linux machine")
+
        nmCmd.AddCommand(crashCmd())
        nmCmd.AddCommand(dateTimeCmd())
        nmCmd.AddCommand(fsCmd())
index 6e6ad49..3051218 100644 (file)
@@ -131,7 +131,7 @@ func GetXport() (xport.Xport, error) {
                        cfg.CtlrName = bc.CtlrName
                }
                cfg.OwnAddrType = bc.OwnAddrType
-               globalXport = bll.NewBllXport(cfg)
+               globalXport = bll.NewBllXport(cfg, bc.HciIdx)
 
        case config.CONN_TYPE_BLE_PLAIN, config.CONN_TYPE_BLE_OIC:
                bc, err := config.ParseBleConnString(cp.ConnString)
@@ -261,16 +261,16 @@ func buildBllSesn(cp *config.ConnProfile) (sesn.Sesn, error) {
                return nil, err
        }
 
-       x, err := GetXport()
+       sc, err := config.BuildBllSesnCfg(bc)
        if err != nil {
                return nil, err
        }
-       bx := x.(*bll.BllXport)
 
-       sc, err := config.BuildBllSesnCfg(bc)
+       x, err := GetXport()
        if err != nil {
                return nil, err
        }
+       bx := x.(*bll.BllXport)
 
        switch cp.Type {
        case config.CONN_TYPE_BLL_PLAIN:
index 82e7d16..142b177 100644 (file)
@@ -45,6 +45,8 @@ type BleConfig struct {
 
        BlehostdPath   string
        ControllerPath string
+
+       HciIdx int
 }
 
 func NewBleConfig() *BleConfig {
@@ -109,6 +111,8 @@ func ParseBleConnString(cs string) (*BleConfig, error) {
                }
        }
 
+       bc.HciIdx = nmutil.HciIdx
+
        return bc, nil
 }
 
index 070d9ff..a507761 100644 (file)
@@ -43,6 +43,8 @@ type BllConfig struct {
 
        // Connection timeout, in seconds.
        ConnTimeout float64
+
+       HciIdx int
 }
 
 func NewBllConfig() *BllConfig {
@@ -99,6 +101,8 @@ func ParseBllConnString(cs string) (*BllConfig, error) {
                }
        }
 
+       bc.HciIdx = nmutil.HciIdx
+
        return bc, nil
 }
 
index 910dd77..908d7b0 100644 (file)
@@ -44,6 +44,7 @@ var ConnType string
 var ConnString string
 var ConnExtra string
 var ToolInfo ToolInfoType
+var HciIdx int
 
 func TxOptions() sesn.TxOptions {
        return sesn.TxOptions{