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/03/03 03:19:44 UTC

[2/7] incubator-mynewt-newt git commit: MYNEWT-653 Use runtimeco gatt fork.

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/linux/util/util.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/linux/util/util.go b/newtmgr/vendor/github.com/runtimeinc/gatt/linux/util/util.go
deleted file mode 100644
index 4933008..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/linux/util/util.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package util
-
-import "encoding/binary"
-
-type order struct{ binary.ByteOrder }
-
-var Order = order{binary.LittleEndian}
-
-func (o order) Int8(b []byte) int8   { return int8(b[0]) }
-func (o order) Uint8(b []byte) uint8 { return b[0] }
-func (o order) MAC(b []byte) [6]byte { return [6]byte{b[5], b[4], b[3], b[2], b[1], b[0]} }
-
-func (o order) PutUint8(b []byte, v uint8) { b[0] = v }
-func (o order) PutMAC(b []byte, m [6]byte) {
-	b[0], b[1], b[2], b[3], b[4], b[5] = m[5], m[4], m[3], m[2], m[1], m[0]
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/option_darwin.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/option_darwin.go b/newtmgr/vendor/github.com/runtimeinc/gatt/option_darwin.go
deleted file mode 100644
index 617db21..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/option_darwin.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package gatt
-
-const (
-	CentralManager    = 0 // Client functions (default)
-	PeripheralManager = 1 // Server functions
-)
-
-// MacDeviceRole specify the XPC connection type to connect blued.
-// THis option can only be used with NewDevice on OS X implementation.
-func MacDeviceRole(r int) Option {
-	return func(d Device) error {
-		d.(*device).role = r
-		return nil
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/option_linux.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/option_linux.go b/newtmgr/vendor/github.com/runtimeinc/gatt/option_linux.go
deleted file mode 100644
index fe8065b..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/option_linux.go
+++ /dev/null
@@ -1,87 +0,0 @@
-package gatt
-
-import (
-	"errors"
-	"io"
-
-	"github.com/runtimeinc/gatt/linux/cmd"
-)
-
-// LnxDeviceID specifies which HCI device to use.
-// If n is set to -1, all the available HCI devices will be probed.
-// If chk is set to true, LnxDeviceID checks the LE support in the feature list of the HCI device.
-// This is to filter devices that does not support LE. In case some LE driver that doesn't correctly
-// set the LE support in its feature list, user can turn off the check.
-// This option can only be used with NewDevice on Linux implementation.
-func LnxDeviceID(n int, chk bool) Option {
-	return func(d Device) error {
-		d.(*device).devID = n
-		d.(*device).chkLE = chk
-		return nil
-	}
-}
-
-// LnxMaxConnections is an optional parameter.
-// If set, it overrides the default max connections supported.
-// This option can only be used with NewDevice on Linux implementation.
-func LnxMaxConnections(n int) Option {
-	return func(d Device) error {
-		d.(*device).maxConn = n
-		return nil
-	}
-}
-
-// LnxSetAdvertisingEnable sets the advertising data to the HCI device.
-// This option can be used with Option on Linux implementation.
-func LnxSetAdvertisingEnable(en bool) Option {
-	return func(d Device) error {
-		dd := d.(*device)
-		if dd == nil {
-			return errors.New("device is not initialized")
-		}
-		if err := dd.update(); err != nil {
-			return err
-		}
-		return dd.hci.SetAdvertiseEnable(en)
-	}
-}
-
-// LnxSetAdvertisingData sets the advertising data to the HCI device.
-// This option can be used with NewDevice or Option on Linux implementation.
-func LnxSetAdvertisingData(c *cmd.LESetAdvertisingData) Option {
-	return func(d Device) error {
-		d.(*device).advData = c
-		return nil
-	}
-}
-
-// LnxSetScanResponseData sets the scan response data to the HXI device.
-// This option can be used with NewDevice or Option on Linux implementation.
-func LnxSetScanResponseData(c *cmd.LESetScanResponseData) Option {
-	return func(d Device) error {
-		d.(*device).scanResp = c
-		return nil
-	}
-}
-
-// LnxSetAdvertisingParameters sets the advertising parameters to the HCI device.
-// This option can be used with NewDevice or Option on Linux implementation.
-func LnxSetAdvertisingParameters(c *cmd.LESetAdvertisingParameters) Option {
-	return func(d Device) error {
-		d.(*device).advParam = c
-		return nil
-	}
-}
-
-// LnxSendHCIRawCommand sends a raw command to the HCI device
-// This option can be used with NewDevice or Option on Linux implementation.
-func LnxSendHCIRawCommand(c cmd.CmdParam, rsp io.Writer) Option {
-	return func(d Device) error {
-		b, err := d.(*device).SendHCIRawCommand(c)
-		if rsp == nil {
-			return err
-		}
-		rsp.Write(b)
-		return err
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral.go b/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral.go
deleted file mode 100644
index 36ad578..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral.go
+++ /dev/null
@@ -1,102 +0,0 @@
-package gatt
-
-import (
-	"errors"
-	"sync"
-)
-
-// Peripheral is the interface that represent a remote peripheral device.
-type Peripheral interface {
-	// Device returns the underlying device.
-	Device() Device
-
-	// ID is the platform specific unique ID of the remote peripheral, e.g. MAC for Linux, Peripheral UUID for MacOS.
-	ID() string
-
-	// Name returns the name of the remote peripheral.
-	// This can be the advertised name, if exists, or the GAP device name, which takes priority
-	Name() string
-
-	// Services returnns the services of the remote peripheral which has been discovered.
-	Services() []*Service
-
-	// DiscoverServices discover the specified services of the remote peripheral.
-	// If the specified services is set to nil, all the available services of the remote peripheral are returned.
-	DiscoverServices(s []UUID) ([]*Service, error)
-
-	// DiscoverIncludedServices discovers the specified included services of a service.
-	// If the specified services is set to nil, all the included services of the service are returned.
-	DiscoverIncludedServices(ss []UUID, s *Service) ([]*Service, error)
-
-	// DiscoverCharacteristics discovers the specified characteristics of a service.
-	// If the specified characterstics is set to nil, all the characteristic of the service are returned.
-	DiscoverCharacteristics(c []UUID, s *Service) ([]*Characteristic, error)
-
-	// DiscoverDescriptors discovers the descriptors of a characteristic.
-	// If the specified descriptors is set to nil, all the descriptors of the characteristic are returned.
-	DiscoverDescriptors(d []UUID, c *Characteristic) ([]*Descriptor, error)
-
-	// ReadCharacteristic retrieves the value of a specified characteristic.
-	ReadCharacteristic(c *Characteristic) ([]byte, error)
-
-	// ReadLongCharacteristic retrieves the value of a specified characteristic that is longer than the
-	// MTU.
-	ReadLongCharacteristic(c *Characteristic) ([]byte, error)
-
-	// ReadDescriptor retrieves the value of a specified characteristic descriptor.
-	ReadDescriptor(d *Descriptor) ([]byte, error)
-
-	// WriteCharacteristic writes the value of a characteristic.
-	WriteCharacteristic(c *Characteristic, b []byte, noRsp bool) error
-
-	// WriteDescriptor writes the value of a characteristic descriptor.
-	WriteDescriptor(d *Descriptor, b []byte) error
-
-	// SetNotifyValue sets notifications for the value of a specified characteristic.
-	SetNotifyValue(c *Characteristic, f func(*Characteristic, []byte, error)) error
-
-	// SetIndicateValue sets indications for the value of a specified characteristic.
-	SetIndicateValue(c *Characteristic, f func(*Characteristic, []byte, error)) error
-
-	// ReadRSSI retrieves the current RSSI value for the remote peripheral.
-	ReadRSSI() int
-
-	// SetMTU sets the mtu for the remote peripheral.
-	SetMTU(mtu uint16) error
-}
-
-type subscriber struct {
-	sub map[uint16]subscribefn
-	mu  *sync.Mutex
-}
-
-type subscribefn func([]byte, error)
-
-func newSubscriber() *subscriber {
-	return &subscriber{
-		sub: make(map[uint16]subscribefn),
-		mu:  &sync.Mutex{},
-	}
-}
-
-func (s *subscriber) subscribe(h uint16, f subscribefn) {
-	s.mu.Lock()
-	s.sub[h] = f
-	s.mu.Unlock()
-}
-
-func (s *subscriber) unsubscribe(h uint16) {
-	s.mu.Lock()
-	delete(s.sub, h)
-	s.mu.Unlock()
-}
-
-func (s *subscriber) fn(h uint16) subscribefn {
-	s.mu.Lock()
-	defer s.mu.Unlock()
-	return s.sub[h]
-}
-
-var (
-	ErrInvalidLength = errors.New("invalid length")
-)

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_darwin.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_darwin.go b/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_darwin.go
deleted file mode 100644
index 69f9b36..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_darwin.go
+++ /dev/null
@@ -1,277 +0,0 @@
-package gatt
-
-import (
-	"errors"
-	"log"
-
-	"github.com/runtimeinc/gatt/xpc"
-)
-
-type peripheral struct {
-	// NameChanged is called whenever the peripheral GAP Device name has changed.
-	NameChanged func(Peripheral)
-
-	// ServicesModified is called when one or more service of a peripheral have changed.
-	// A list of invalid service is provided in the parameter.
-	ServicesModified func(Peripheral, []*Service)
-
-	d    *device
-	svcs []*Service
-
-	sub *subscriber
-
-	id   xpc.UUID
-	name string
-
-	reqc  chan message
-	rspc  chan message
-	quitc chan struct{}
-}
-
-func NewPeripheral(u UUID) Peripheral { return &peripheral{id: xpc.UUID(u.b)} }
-
-func (p *peripheral) Device() Device       { return p.d }
-func (p *peripheral) ID() string           { return p.id.String() }
-func (p *peripheral) Name() string         { return p.name }
-func (p *peripheral) Services() []*Service { return p.svcs }
-
-func (p *peripheral) DiscoverServices(ss []UUID) ([]*Service, error) {
-	rsp := p.sendReq(45, xpc.Dict{
-		"kCBMsgArgDeviceUUID": p.id,
-		"kCBMsgArgUUIDs":      uuidSlice(ss),
-	})
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return nil, attEcode(res)
-	}
-	svcs := []*Service{}
-	for _, xss := range rsp["kCBMsgArgServices"].(xpc.Array) {
-		xs := xss.(xpc.Dict)
-		u := MustParseUUID(xs.MustGetHexBytes("kCBMsgArgUUID"))
-		h := uint16(xs.MustGetInt("kCBMsgArgServiceStartHandle"))
-		endh := uint16(xs.MustGetInt("kCBMsgArgServiceEndHandle"))
-		svcs = append(svcs, &Service{uuid: u, h: h, endh: endh})
-	}
-	p.svcs = svcs
-	return svcs, nil
-}
-
-func (p *peripheral) DiscoverIncludedServices(ss []UUID, s *Service) ([]*Service, error) {
-	rsp := p.sendReq(60, xpc.Dict{
-		"kCBMsgArgDeviceUUID":         p.id,
-		"kCBMsgArgServiceStartHandle": s.h,
-		"kCBMsgArgServiceEndHandle":   s.endh,
-		"kCBMsgArgUUIDs":              uuidSlice(ss),
-	})
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return nil, attEcode(res)
-	}
-	// TODO
-	return nil, notImplemented
-}
-
-func (p *peripheral) DiscoverCharacteristics(cs []UUID, s *Service) ([]*Characteristic, error) {
-	rsp := p.sendReq(62, xpc.Dict{
-		"kCBMsgArgDeviceUUID":         p.id,
-		"kCBMsgArgServiceStartHandle": s.h,
-		"kCBMsgArgServiceEndHandle":   s.endh,
-		"kCBMsgArgUUIDs":              uuidSlice(cs),
-	})
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return nil, attEcode(res)
-	}
-	for _, xcs := range rsp.MustGetArray("kCBMsgArgCharacteristics") {
-		xc := xcs.(xpc.Dict)
-		u := MustParseUUID(xc.MustGetHexBytes("kCBMsgArgUUID"))
-		ch := uint16(xc.MustGetInt("kCBMsgArgCharacteristicHandle"))
-		vh := uint16(xc.MustGetInt("kCBMsgArgCharacteristicValueHandle"))
-		props := Property(xc.MustGetInt("kCBMsgArgCharacteristicProperties"))
-		c := &Characteristic{uuid: u, svc: s, props: props, h: ch, vh: vh}
-		s.chars = append(s.chars, c)
-	}
-	return s.chars, nil
-}
-
-func (p *peripheral) DiscoverDescriptors(ds []UUID, c *Characteristic) ([]*Descriptor, error) {
-	rsp := p.sendReq(70, xpc.Dict{
-		"kCBMsgArgDeviceUUID":                p.id,
-		"kCBMsgArgCharacteristicHandle":      c.h,
-		"kCBMsgArgCharacteristicValueHandle": c.vh,
-		"kCBMsgArgUUIDs":                     uuidSlice(ds),
-	})
-	for _, xds := range rsp.MustGetArray("kCBMsgArgDescriptors") {
-		xd := xds.(xpc.Dict)
-		u := MustParseUUID(xd.MustGetHexBytes("kCBMsgArgUUID"))
-		h := uint16(xd.MustGetInt("kCBMsgArgDescriptorHandle"))
-		d := &Descriptor{uuid: u, char: c, h: h}
-		c.descs = append(c.descs, d)
-	}
-	return c.descs, nil
-}
-
-func (p *peripheral) ReadCharacteristic(c *Characteristic) ([]byte, error) {
-	rsp := p.sendReq(65, xpc.Dict{
-		"kCBMsgArgDeviceUUID":                p.id,
-		"kCBMsgArgCharacteristicHandle":      c.h,
-		"kCBMsgArgCharacteristicValueHandle": c.vh,
-	})
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return nil, attEcode(res)
-	}
-	b := rsp.MustGetBytes("kCBMsgArgData")
-	return b, nil
-}
-
-func (p *peripheral) ReadLongCharacteristic(c *Characteristic) ([]byte, error) {
-	return nil, errors.New("Not implemented")
-}
-
-func (p *peripheral) WriteCharacteristic(c *Characteristic, b []byte, noRsp bool) error {
-	args := xpc.Dict{
-		"kCBMsgArgDeviceUUID":                p.id,
-		"kCBMsgArgCharacteristicHandle":      c.h,
-		"kCBMsgArgCharacteristicValueHandle": c.vh,
-		"kCBMsgArgData":                      b,
-		"kCBMsgArgType":                      map[bool]int{false: 0, true: 1}[noRsp],
-	}
-	if noRsp {
-		p.sendCmd(66, args)
-		return nil
-	}
-	rsp := p.sendReq(65, args)
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return attEcode(res)
-	}
-	return nil
-}
-
-func (p *peripheral) ReadDescriptor(d *Descriptor) ([]byte, error) {
-	rsp := p.sendReq(77, xpc.Dict{
-		"kCBMsgArgDeviceUUID":       p.id,
-		"kCBMsgArgDescriptorHandle": d.h,
-	})
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return nil, attEcode(res)
-	}
-	b := rsp.MustGetBytes("kCBMsgArgData")
-	return b, nil
-}
-
-func (p *peripheral) WriteDescriptor(d *Descriptor, b []byte) error {
-	rsp := p.sendReq(78, xpc.Dict{
-		"kCBMsgArgDeviceUUID":       p.id,
-		"kCBMsgArgDescriptorHandle": d.h,
-		"kCBMsgArgData":             b,
-	})
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return attEcode(res)
-	}
-	return nil
-}
-
-func (p *peripheral) SetNotifyValue(c *Characteristic, f func(*Characteristic, []byte, error)) error {
-	set := 1
-	if f == nil {
-		set = 0
-	}
-	// To avoid race condition, registeration is handled before requesting the server.
-	if f != nil {
-		// Note: when notified, core bluetooth reports characteristic handle, not value's handle.
-		p.sub.subscribe(c.h, func(b []byte, err error) { f(c, b, err) })
-	}
-	rsp := p.sendReq(68, xpc.Dict{
-		"kCBMsgArgDeviceUUID":                p.id,
-		"kCBMsgArgCharacteristicHandle":      c.h,
-		"kCBMsgArgCharacteristicValueHandle": c.vh,
-		"kCBMsgArgState":                     set,
-	})
-	if res := rsp.MustGetInt("kCBMsgArgResult"); res != 0 {
-		return attEcode(res)
-	}
-	// To avoid race condition, unregisteration is handled after server responses.
-	if f == nil {
-		p.sub.unsubscribe(c.h)
-	}
-	return nil
-}
-
-func (p *peripheral) SetIndicateValue(c *Characteristic,
-	f func(*Characteristic, []byte, error)) error {
-	// TODO: Implement set indications logic for darwin (https://github.com/runtimeinc/gatt/issues/32)
-	return nil
-}
-
-func (p *peripheral) ReadRSSI() int {
-	rsp := p.sendReq(43, xpc.Dict{"kCBMsgArgDeviceUUID": p.id})
-	return rsp.MustGetInt("kCBMsgArgData")
-}
-
-func (p *peripheral) SetMTU(mtu uint16) error {
-	return errors.New("Not implemented")
-}
-
-func uuidSlice(uu []UUID) [][]byte {
-	us := [][]byte{}
-	for _, u := range uu {
-		us = append(us, reverse(u.b))
-	}
-	return us
-}
-
-type message struct {
-	id   int
-	args xpc.Dict
-	rspc chan xpc.Dict
-}
-
-func (p *peripheral) sendCmd(id int, args xpc.Dict) {
-	p.reqc <- message{id: id, args: args}
-}
-
-func (p *peripheral) sendReq(id int, args xpc.Dict) xpc.Dict {
-	m := message{id: id, args: args, rspc: make(chan xpc.Dict)}
-	p.reqc <- m
-	return <-m.rspc
-}
-
-func (p *peripheral) loop() {
-	rspc := make(chan message)
-
-	go func() {
-		for {
-			select {
-			case req := <-p.reqc:
-				p.d.sendCBMsg(req.id, req.args)
-				if req.rspc == nil {
-					break
-				}
-				m := <-rspc
-				req.rspc <- m.args
-			case <-p.quitc:
-				return
-			}
-		}
-	}()
-
-	for {
-		select {
-		case rsp := <-p.rspc:
-			// Notification
-			if rsp.id == 71 && rsp.args.GetInt("kCBMsgArgIsNotification", 0) != 0 {
-				// While we're notified with the value's handle, blued reports the characteristic handle.
-				ch := uint16(rsp.args.MustGetInt("kCBMsgArgCharacteristicHandle"))
-				b := rsp.args.MustGetBytes("kCBMsgArgData")
-				f := p.sub.fn(ch)
-				if f == nil {
-					log.Printf("notified by unsubscribed handle")
-					// FIXME: should terminate the connection?
-				} else {
-					go f(b, nil)
-				}
-				break
-			}
-			rspc <- rsp
-		case <-p.quitc:
-			return
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_linux.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_linux.go b/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_linux.go
deleted file mode 100644
index a8a819c..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/peripheral_linux.go
+++ /dev/null
@@ -1,448 +0,0 @@
-package gatt
-
-import (
-	"bytes"
-	"encoding/binary"
-	"fmt"
-	"io"
-	"log"
-	"net"
-	"strings"
-
-	"github.com/runtimeinc/gatt/linux"
-)
-
-type peripheral struct {
-	// NameChanged is called whenever the peripheral GAP device name has changed.
-	NameChanged func(*peripheral)
-
-	// ServicedModified is called when one or more service of a peripheral have changed.
-	// A list of invalid service is provided in the parameter.
-	ServicesModified func(*peripheral, []*Service)
-
-	d    *device
-	svcs []*Service
-
-	sub *subscriber
-
-	mtu uint16
-	l2c io.ReadWriteCloser
-
-	reqc  chan message
-	quitc chan struct{}
-
-	pd *linux.PlatData // platform specific data
-}
-
-func (p *peripheral) Device() Device       { return p.d }
-func (p *peripheral) ID() string           { return strings.ToUpper(net.HardwareAddr(p.pd.Address[:]).String()) }
-func (p *peripheral) Name() string         { return p.pd.Name }
-func (p *peripheral) Services() []*Service { return p.svcs }
-
-func finish(op byte, h uint16, b []byte) bool {
-	done := b[0] == attOpError && b[1] == op && b[2] == byte(h) && b[3] == byte(h>>8)
-	e := attEcode(b[4])
-	if e != attEcodeAttrNotFound {
-		// log.Printf("unexpected protocol error: %s", e)
-		// FIXME: terminate the connection
-	}
-	return done
-}
-
-func (p *peripheral) DiscoverServices(s []UUID) ([]*Service, error) {
-	// TODO: implement the UUID filters
-	// p.pd.Conn.Write([]byte{0x02, 0x87, 0x00}) // MTU
-	done := false
-	start := uint16(0x0001)
-	for !done {
-		op := byte(attOpReadByGroupReq)
-		b := make([]byte, 7)
-		b[0] = op
-		binary.LittleEndian.PutUint16(b[1:3], start)
-		binary.LittleEndian.PutUint16(b[3:5], 0xFFFF)
-		binary.LittleEndian.PutUint16(b[5:7], 0x2800)
-
-		b = p.sendReq(op, b)
-		if finish(op, start, b) {
-			break
-		}
-		b = b[1:]
-		l, b := int(b[0]), b[1:]
-		switch {
-		case l == 6 && (len(b)%6 == 0):
-		case l == 20 && (len(b)%20 == 0):
-		default:
-			return nil, ErrInvalidLength
-		}
-
-		for len(b) != 0 {
-			h := binary.LittleEndian.Uint16(b[:2])
-			endh := binary.LittleEndian.Uint16(b[2:4])
-			s := &Service{
-				uuid: UUID{b[4:l]},
-				h:    h,
-				endh: endh,
-			}
-			p.svcs = append(p.svcs, s)
-			b = b[l:]
-			done = endh == 0xFFFF
-			start = endh + 1
-		}
-	}
-	return p.svcs, nil
-}
-
-func (p *peripheral) DiscoverIncludedServices(ss []UUID, s *Service) ([]*Service, error) {
-	// TODO
-	return nil, nil
-}
-
-func (p *peripheral) DiscoverCharacteristics(cs []UUID, s *Service) ([]*Characteristic, error) {
-	// TODO: implement the UUID filters
-	done := false
-	start := s.h
-	var prev *Characteristic
-	for !done {
-		op := byte(attOpReadByTypeReq)
-		b := make([]byte, 7)
-		b[0] = op
-		binary.LittleEndian.PutUint16(b[1:3], start)
-		binary.LittleEndian.PutUint16(b[3:5], s.endh)
-		binary.LittleEndian.PutUint16(b[5:7], 0x2803)
-
-		b = p.sendReq(op, b)
-		if finish(op, start, b) {
-			break
-		}
-		b = b[1:]
-
-		l, b := int(b[0]), b[1:]
-		switch {
-		case l == 7 && (len(b)%7 == 0):
-		case l == 21 && (len(b)%21 == 0):
-		default:
-			return nil, ErrInvalidLength
-		}
-
-		for len(b) != 0 {
-			h := binary.LittleEndian.Uint16(b[:2])
-			props := Property(b[2])
-			vh := binary.LittleEndian.Uint16(b[3:5])
-			u := UUID{b[5:l]}
-			s := searchService(p.svcs, h, vh)
-			if s == nil {
-				log.Printf("Can't find service range that contains 0x%04X - 0x%04X", h, vh)
-				return nil, fmt.Errorf("Can't find service range that contains 0x%04X - 0x%04X", h, vh)
-			}
-			c := &Characteristic{
-				uuid:  u,
-				svc:   s,
-				props: props,
-				h:     h,
-				vh:    vh,
-			}
-			s.chars = append(s.chars, c)
-			b = b[l:]
-			done = vh == s.endh
-			start = vh + 1
-			if prev != nil {
-				prev.endh = c.h - 1
-			}
-			prev = c
-		}
-	}
-	if len(s.chars) > 1 {
-		s.chars[len(s.chars)-1].endh = s.endh
-	}
-	return s.chars, nil
-}
-
-func (p *peripheral) DiscoverDescriptors(ds []UUID, c *Characteristic) ([]*Descriptor, error) {
-	// TODO: implement the UUID filters
-	done := false
-	start := c.vh + 1
-	for !done {
-		if c.endh == 0 {
-			c.endh = c.svc.endh
-		}
-		op := byte(attOpFindInfoReq)
-		b := make([]byte, 5)
-		b[0] = op
-		binary.LittleEndian.PutUint16(b[1:3], start)
-		binary.LittleEndian.PutUint16(b[3:5], c.endh)
-
-		b = p.sendReq(op, b)
-		if finish(attOpFindInfoReq, start, b) {
-			break
-		}
-		b = b[1:]
-
-		var l int
-		f, b := int(b[0]), b[1:]
-		switch {
-		case f == 1 && (len(b)%4 == 0):
-			l = 4
-		case f == 2 && (len(b)%18 == 0):
-			l = 18
-		default:
-			return nil, ErrInvalidLength
-		}
-
-		for len(b) != 0 {
-			h := binary.LittleEndian.Uint16(b[:2])
-			u := UUID{b[2:l]}
-			d := &Descriptor{uuid: u, h: h, char: c}
-			c.descs = append(c.descs, d)
-			if u.Equal(attrClientCharacteristicConfigUUID) {
-				c.cccd = d
-			}
-			b = b[l:]
-			done = h == c.endh
-			start = h + 1
-		}
-	}
-	return c.descs, nil
-}
-
-func (p *peripheral) ReadCharacteristic(c *Characteristic) ([]byte, error) {
-	b := make([]byte, 3)
-	op := byte(attOpReadReq)
-	b[0] = op
-	binary.LittleEndian.PutUint16(b[1:3], c.vh)
-
-	b = p.sendReq(op, b)
-	b = b[1:]
-	return b, nil
-}
-
-func (p *peripheral) ReadLongCharacteristic(c *Characteristic) ([]byte, error) {
-	// The spec says that a read blob request should fail if the characteristic
-	// is smaller than mtu - 1.  To simplify the API, the first read is done
-	// with a regular read request.  If the buffer received is equal to mtu -1,
-	// then we read the rest of the data using read blob.
-	firstRead, err := p.ReadCharacteristic(c)
-	if err != nil {
-		return nil, err
-	}
-	if len(firstRead) < int(p.mtu)-1 {
-		return firstRead, nil
-	}
-
-	var buf bytes.Buffer
-	buf.Write(firstRead)
-	off := uint16(len(firstRead))
-	for {
-		b := make([]byte, 5)
-		op := byte(attOpReadBlobReq)
-		b[0] = op
-		binary.LittleEndian.PutUint16(b[1:3], c.vh)
-		binary.LittleEndian.PutUint16(b[3:5], off)
-
-		b = p.sendReq(op, b)
-		b = b[1:]
-		if len(b) == 0 {
-			break
-		}
-		buf.Write(b)
-		off += uint16(len(b))
-		if len(b) < int(p.mtu)-1 {
-			break
-		}
-	}
-	return buf.Bytes(), nil
-}
-
-func (p *peripheral) WriteCharacteristic(c *Characteristic, value []byte, noRsp bool) error {
-	b := make([]byte, 3+len(value))
-	op := byte(attOpWriteReq)
-	b[0] = op
-	if noRsp {
-		b[0] = attOpWriteCmd
-	}
-	binary.LittleEndian.PutUint16(b[1:3], c.vh)
-	copy(b[3:], value)
-
-	if noRsp {
-		p.sendCmd(op, b)
-		return nil
-	}
-	b = p.sendReq(op, b)
-	// TODO: error handling
-	b = b[1:]
-	return nil
-}
-
-func (p *peripheral) ReadDescriptor(d *Descriptor) ([]byte, error) {
-	b := make([]byte, 3)
-	op := byte(attOpReadReq)
-	b[0] = op
-	binary.LittleEndian.PutUint16(b[1:3], d.h)
-
-	b = p.sendReq(op, b)
-	b = b[1:]
-	// TODO: error handling
-	return b, nil
-}
-
-func (p *peripheral) WriteDescriptor(d *Descriptor, value []byte) error {
-	b := make([]byte, 3+len(value))
-	op := byte(attOpWriteReq)
-	b[0] = op
-	binary.LittleEndian.PutUint16(b[1:3], d.h)
-	copy(b[3:], value)
-
-	b = p.sendReq(op, b)
-	b = b[1:]
-	// TODO: error handling
-	return nil
-}
-
-func (p *peripheral) setNotifyValue(c *Characteristic, flag uint16,
-	f func(*Characteristic, []byte, error)) error {
-/*
-	if c.cccd == nil {
-		return errors.New("no cccd") // FIXME
-	}
-	ccc := uint16(0)
-	if f != nil {
-		ccc = flag
-*/
-		p.sub.subscribe(c.vh, func(b []byte, err error) { f(c, b, err) })
-/*
-	}
-	b := make([]byte, 5)
-	op := byte(attOpWriteReq)
-	b[0] = op
-	binary.LittleEndian.PutUint16(b[1:3], c.cccd.h)
-	binary.LittleEndian.PutUint16(b[3:5], ccc)
-
-	b = p.sendReq(op, b)
-	b = b[1:]
-	// TODO: error handling
-	if f == nil {
-		p.sub.unsubscribe(c.vh)
-	}
-*/
-	return nil
-}
-
-func (p *peripheral) SetNotifyValue(c *Characteristic,
-	f func(*Characteristic, []byte, error)) error {
-	return p.setNotifyValue(c, gattCCCNotifyFlag, f)
-}
-
-func (p *peripheral) SetIndicateValue(c *Characteristic,
-	f func(*Characteristic, []byte, error)) error {
-	return p.setNotifyValue(c, gattCCCIndicateFlag, f)
-}
-
-func (p *peripheral) ReadRSSI() int {
-	// TODO: implement
-	return -1
-}
-
-func searchService(ss []*Service, start, end uint16) *Service {
-	for _, s := range ss {
-		if s.h < start && s.endh >= end {
-			return s
-		}
-	}
-	return nil
-}
-
-// TODO: unifiy the message with OS X pots and refactor
-type message struct {
-	op   byte
-	b    []byte
-	rspc chan []byte
-}
-
-func (p *peripheral) sendCmd(op byte, b []byte) {
-	p.reqc <- message{op: op, b: b}
-}
-
-func (p *peripheral) sendReq(op byte, b []byte) []byte {
-	m := message{op: op, b: b, rspc: make(chan []byte)}
-	p.reqc <- m
-	return <-m.rspc
-}
-
-func (p *peripheral) loop() {
-	// Serialize the request.
-	rspc := make(chan []byte)
-
-	// Dequeue request loop
-	go func() {
-		for {
-			select {
-			case req := <-p.reqc:
-				p.l2c.Write(req.b)
-				if req.rspc == nil {
-					break
-				}
-				r := <-rspc
-				switch reqOp, rspOp := req.b[0], r[0]; {
-				case rspOp == attRspFor[reqOp]:
-				case rspOp == attOpError && r[1] == reqOp:
-				default:
-					log.Printf("Request 0x%02x got a mismatched response: 0x%02x", reqOp, rspOp)
-					// FIXME: terminate the connection?
-				}
-				req.rspc <- r
-			case <-p.quitc:
-				return
-			}
-		}
-	}()
-
-	// L2CAP implementations shall support a minimum MTU size of 48 bytes.
-	// The default value is 672 bytes
-	buf := make([]byte, 672)
-
-	// Handling response or notification/indication
-	for {
-		n, err := p.l2c.Read(buf)
-		if n == 0 || err != nil {
-			close(p.quitc)
-			return
-		}
-
-		b := make([]byte, n)
-		copy(b, buf)
-
-		if (b[0] != attOpHandleNotify) && (b[0] != attOpHandleInd) {
-			rspc <- b
-			continue
-		}
-
-		h := binary.LittleEndian.Uint16(b[1:3])
-		f := p.sub.fn(h)
-		if f == nil {
-			log.Printf("notified by unsubscribed handle")
-			// FIXME: terminate the connection?
-		} else {
-			go f(b[3:], nil)
-		}
-
-		if b[0] == attOpHandleInd {
-			// write aknowledgement for indication
-			p.l2c.Write([]byte{attOpHandleCnf})
-		}
-
-	}
-}
-
-func (p *peripheral) SetMTU(mtu uint16) error {
-	b := make([]byte, 3)
-	op := byte(attOpMtuReq)
-	b[0] = op
-	binary.LittleEndian.PutUint16(b[1:3], uint16(mtu))
-
-	b = p.sendReq(op, b)
-	serverMTU := binary.LittleEndian.Uint16(b[1:3])
-	if serverMTU < mtu {
-		mtu = serverMTU
-	}
-	p.mtu = mtu
-	return nil
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/readme.md
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/readme.md b/newtmgr/vendor/github.com/runtimeinc/gatt/readme.md
deleted file mode 100644
index ea3a957..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/readme.md
+++ /dev/null
@@ -1,115 +0,0 @@
-# Package gatt provides a Bluetooth Low Energy GATT implementation.
-
-Gatt (Generic Attribute Profile) is the protocol used to write BLE peripherals (servers) and centrals (clients).
-
-As a peripheral, you can create services, characteristics, and descriptors,
-advertise, accept connections, and handle requests.
-
-As a central, you can scan, connect, discover services, and make requests.
-
-## SETUP
-
-### gatt supports both Linux and OS X.
-
-### On Linux:
-To gain complete and exclusive control of the HCI device, gatt uses
-HCI_CHANNEL_USER (introduced in Linux v3.14) instead of HCI_CHANNEL_RAW.
-Those who must use an older kernel may patch in these relevant commits
-from Marcel Holtmann:
-
-    Bluetooth: Introduce new HCI socket channel for user operation
-    Bluetooth: Introduce user channel flag for HCI devices
-    Bluetooth: Refactor raw socket filter into more readable code
-
-Note that because gatt uses HCI_CHANNEL_USER, once gatt has opened the
-device no other program may access it.
-
-Before starting a gatt program, make sure that your BLE device is down:
-
-    sudo hciconfig
-    sudo hciconfig hci0 down  # or whatever hci device you want to use
-
-If you have BlueZ 5.14+ (or aren't sure), stop the built-in
-bluetooth server, which interferes with gatt, e.g.:
-
-    sudo service bluetooth stop
-
-Because gatt programs administer network devices, they must
-either be run as root, or be granted appropriate capabilities:
-
-    sudo <executable>
-    # OR
-    sudo setcap 'cap_net_raw,cap_net_admin=eip' <executable>
-    <executable>
-
-## Usage
-Please see [godoc.org](http://godoc.org/github.com/paypal/gatt) for documentation.
-
-## Examples
-
-### Build and run the examples on a native environment (Linux or OS X)
-
-Go is a compiled language, which means to run the examples you need to build them first.
-
-    # Build the sample server.
-    go build examples/server.go
-    # Start the sample server.
-    sudo ./server
-
-Alternatively, you can use "go run" to build and run the examples in a single step:
-
-    # Build and run the sample server.
-    sudo go run examples/server.go
-
-Discoverer and explorer demonstrates central (client) functions:
-
-    # Discover surrounding peripherals.
-    sudo go run examples/discoverer.go
-
-    # Connect to and explorer a peripheral device.
-    sudo go run examples/explorer.go <peripheral ID>
-
-### Cross-compile and deploy to a target device
-
-    # Build and run the server example on a ARMv5 target device.
-    GOARCH=arm GOARM=5 GOOS=linux go build examples/server.go
-    cp server <target device>
-    # Start the server on the target device
-    sudo ./server
-
-See the server.go, discoverer.go, and explorer.go in the examples/
-directory for writing server or client programs that run on Linux
-and OS X.
-
-Users, especially on Linux platforms, seeking finer-grained control
-over the devices can see the examples/server_lnx.go for the usage
-of Option, which are platform specific.
-
-See the rest of the docs for other options and finer-grained control.
-
-## Note
-Note that some BLE central devices, particularly iOS, may aggressively
-cache results from previous connections. If you change your services or
-characteristics, you may need to reboot the other device to pick up the
-changes. This is a common source of confusion and apparent bugs. For an
-OS X central, see http://stackoverflow.com/questions/20553957.
-
-## Known Issues
-
-Currently OS X vesion  does not support subscribing to indications. 
-Please check [#32](https://github.com/paypal/gatt/issues/32) for the status of this issue.
-
-## REFERENCES
-
-gatt started life as a port of bleno, to which it is indebted:
-https://github.com/sandeepmistry/bleno. If you are having
-problems with gatt, particularly around installation, issues
-filed with bleno might also be helpful references.
-
-To try out your GATT server, it is useful to experiment with a
-generic BLE client. LightBlue is a good choice. It is available
-free for both iOS and OS X.
-
-gatt is similar to [bleno](https://github.com/sandeepmistry/bleno) and [noble](https://github.com/sandeepmistry/noble), which offer BLE GATT implementations for node.js.
-
-Gatt is released under a [BSD-style license](./LICENSE.md).

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/uuid.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/uuid.go b/newtmgr/vendor/github.com/runtimeinc/gatt/uuid.go
deleted file mode 100644
index 393e548..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/uuid.go
+++ /dev/null
@@ -1,86 +0,0 @@
-package gatt
-
-import (
-	"bytes"
-	"encoding/binary"
-	"encoding/hex"
-	"fmt"
-	"strings"
-)
-
-// A UUID is a BLE UUID.
-type UUID struct {
-	// Hide the bytes, so that we can enforce that they have length 2 or 16,
-	// and that they are immutable. This simplifies the code and API.
-	b []byte
-}
-
-// UUID16 converts a uint16 (such as 0x1800) to a UUID.
-func UUID16(i uint16) UUID {
-	b := make([]byte, 2)
-	binary.LittleEndian.PutUint16(b, i)
-	return UUID{b}
-}
-
-// ParseUUID parses a standard-format UUID string, such
-// as "1800" or "34DA3AD1-7110-41A1-B1EF-4430F509CDE7".
-func ParseUUID(s string) (UUID, error) {
-	s = strings.Replace(s, "-", "", -1)
-	b, err := hex.DecodeString(s)
-	if err != nil {
-		return UUID{}, err
-	}
-	if err := lenErr(len(b)); err != nil {
-		return UUID{}, err
-	}
-	return UUID{reverse(b)}, nil
-}
-
-// MustParseUUID parses a standard-format UUID string,
-// like ParseUUID, but panics in case of error.
-func MustParseUUID(s string) UUID {
-	u, err := ParseUUID(s)
-	if err != nil {
-		panic(err)
-	}
-	return u
-}
-
-// lenErr returns an error if n is an invalid UUID length.
-func lenErr(n int) error {
-	switch n {
-	case 2, 16:
-		return nil
-	}
-	return fmt.Errorf("UUIDs must have length 2 or 16, got %d", n)
-}
-
-// Len returns the length of the UUID, in bytes.
-// BLE UUIDs are either 2 or 16 bytes.
-func (u UUID) Len() int {
-	return len(u.b)
-}
-
-// String hex-encodes a UUID.
-func (u UUID) String() string {
-	return fmt.Sprintf("%x", reverse(u.b))
-}
-
-// Equal returns a boolean reporting whether v represent the same UUID as u.
-func (u UUID) Equal(v UUID) bool {
-	return bytes.Equal(u.b, v.b)
-}
-
-// reverse returns a reversed copy of u.
-func reverse(u []byte) []byte {
-	// Special-case 16 bit UUIDS for speed.
-	l := len(u)
-	if l == 2 {
-		return []byte{u[1], u[0]}
-	}
-	b := make([]byte, l)
-	for i := 0; i < l/2+1; i++ {
-		b[i], b[l-i-1] = u[l-i-1], u[i]
-	}
-	return b
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/LICENSE
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/LICENSE b/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/LICENSE
deleted file mode 100644
index 766a0a5..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) {{{year}}} {{{fullname}}}
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/doc.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/doc.go b/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/doc.go
deleted file mode 100644
index d292249..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/doc.go
+++ /dev/null
@@ -1,8 +0,0 @@
-// Package xpc provides minimal OS X XPC support required for gatt
-//
-// This is adapted from [goble], by Raffaele Sena.
-//
-//     http://godoc.org/github.com/raff/goble
-//     https://github.com/raff/goble
-
-package xpc

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_darwin.go
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_darwin.go b/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_darwin.go
deleted file mode 100644
index 2a85a99..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_darwin.go
+++ /dev/null
@@ -1,350 +0,0 @@
-package xpc
-
-/*
-#include "xpc_wrapper_darwin.h"
-#include "sys/utsname.h"
-*/
-import "C"
-
-import (
-	"errors"
-	"fmt"
-	"log"
-	r "reflect"
-	"unsafe"
-)
-
-type XPC struct {
-	conn C.xpc_connection_t
-}
-
-func (x *XPC) Send(msg interface{}, verbose bool) {
-	// verbose == true converts the type from bool to C._Bool
-	C.XpcSendMessage(x.conn, goToXpc(msg), true, verbose == true)
-}
-
-//
-// minimal XPC support required for BLE
-//
-
-// a dictionary of things
-type Dict map[string]interface{}
-
-func (d Dict) Contains(k string) bool {
-	_, ok := d[k]
-	return ok
-}
-
-func (d Dict) MustGetDict(k string) Dict {
-	return d[k].(Dict)
-}
-
-func (d Dict) MustGetArray(k string) Array {
-	return d[k].(Array)
-}
-
-func (d Dict) MustGetBytes(k string) []byte {
-	return d[k].([]byte)
-}
-
-func (d Dict) MustGetHexBytes(k string) string {
-	return fmt.Sprintf("%x", d[k].([]byte))
-}
-
-func (d Dict) MustGetInt(k string) int {
-	return int(d[k].(int64))
-}
-
-func (d Dict) MustGetUUID(k string) []byte {
-	u := d[k].(UUID)
-	return u[:]
-}
-
-func (d Dict) GetString(k, defv string) string {
-	if v := d[k]; v != nil {
-		//log.Printf("GetString %s %#v\n", k, v)
-		return v.(string)
-	} else {
-		//log.Printf("GetString %s default %#v\n", k, defv)
-		return defv
-	}
-}
-
-func (d Dict) GetBytes(k string, defv []byte) []byte {
-	if v := d[k]; v != nil {
-		//log.Printf("GetBytes %s %#v\n", k, v)
-		return v.([]byte)
-	} else {
-		//log.Printf("GetBytes %s default %#v\n", k, defv)
-		return defv
-	}
-}
-
-func (d Dict) GetInt(k string, defv int) int {
-	if v := d[k]; v != nil {
-		//log.Printf("GetString %s %#v\n", k, v)
-		return int(v.(int64))
-	} else {
-		//log.Printf("GetString %s default %#v\n", k, defv)
-		return defv
-	}
-}
-
-func (d Dict) GetUUID(k string) UUID {
-	return GetUUID(d[k])
-}
-
-// an array of things
-type Array []interface{}
-
-func (a Array) GetUUID(k int) UUID {
-	return GetUUID(a[k])
-}
-
-// a UUID
-type UUID []byte
-
-func MakeUUID(s string) UUID {
-	var sl []byte
-	fmt.Sscanf(s, "%32x", &sl)
-
-	var uuid [16]byte
-	copy(uuid[:], sl)
-	return UUID(uuid[:])
-}
-
-func (uuid UUID) String() string {
-	return fmt.Sprintf("%x", []byte(uuid))
-}
-
-func GetUUID(v interface{}) UUID {
-	if v == nil {
-		return UUID{}
-	}
-
-	if uuid, ok := v.(UUID); ok {
-		return uuid
-	}
-
-	if bytes, ok := v.([]byte); ok {
-		uuid := UUID{}
-
-		for i, b := range bytes {
-			uuid[i] = b
-		}
-
-		return uuid
-	}
-
-	if bytes, ok := v.([]uint8); ok {
-		uuid := UUID{}
-
-		for i, b := range bytes {
-			uuid[i] = b
-		}
-
-		return uuid
-	}
-
-	log.Fatalf("invalid type for UUID: %#v", v)
-	return UUID{}
-}
-
-var (
-	CONNECTION_INVALID     = errors.New("connection invalid")
-	CONNECTION_INTERRUPTED = errors.New("connection interrupted")
-	CONNECTION_TERMINATED  = errors.New("connection terminated")
-
-	TYPE_OF_UUID  = r.TypeOf(UUID{})
-	TYPE_OF_BYTES = r.TypeOf([]byte{})
-)
-
-type XpcEventHandler interface {
-	HandleXpcEvent(event Dict, err error)
-}
-
-func XpcConnect(service string, eh XpcEventHandler) XPC {
-	cservice := C.CString(service)
-	defer C.free(unsafe.Pointer(cservice))
-	return XPC{conn: C.XpcConnect(cservice, unsafe.Pointer(&eh))}
-}
-
-//export handleXpcEvent
-func handleXpcEvent(event C.xpc_object_t, p unsafe.Pointer) {
-	//log.Printf("handleXpcEvent %#v %#v\n", event, p)
-
-	t := C.xpc_get_type(event)
-	eh := *((*XpcEventHandler)(p))
-
-	if t == C.TYPE_ERROR {
-		if event == C.ERROR_CONNECTION_INVALID {
-			// The client process on the other end of the connection has either
-			// crashed or cancelled the connection. After receiving this error,
-			// the connection is in an invalid state, and you do not need to
-			// call xpc_connection_cancel(). Just tear down any associated state
-			// here.
-			//log.Println("connection invalid")
-			eh.HandleXpcEvent(nil, CONNECTION_INVALID)
-		} else if event == C.ERROR_CONNECTION_INTERRUPTED {
-			//log.Println("connection interrupted")
-			eh.HandleXpcEvent(nil, CONNECTION_INTERRUPTED)
-		} else if event == C.ERROR_CONNECTION_TERMINATED {
-			// Handle per-connection termination cleanup.
-			//log.Println("connection terminated")
-			eh.HandleXpcEvent(nil, CONNECTION_TERMINATED)
-		} else {
-			//log.Println("got some error", event)
-			eh.HandleXpcEvent(nil, fmt.Errorf("%v", event))
-		}
-	} else {
-		eh.HandleXpcEvent(xpcToGo(event).(Dict), nil)
-	}
-}
-
-// goToXpc converts a go object to an xpc object
-func goToXpc(o interface{}) C.xpc_object_t {
-	return valueToXpc(r.ValueOf(o))
-}
-
-// valueToXpc converts a go Value to an xpc object
-//
-// note that not all the types are supported, but only the subset required for Blued
-func valueToXpc(val r.Value) C.xpc_object_t {
-	if !val.IsValid() {
-		return nil
-	}
-
-	var xv C.xpc_object_t
-
-	switch val.Kind() {
-	case r.Int, r.Int8, r.Int16, r.Int32, r.Int64:
-		xv = C.xpc_int64_create(C.int64_t(val.Int()))
-
-	case r.Uint, r.Uint8, r.Uint16, r.Uint32:
-		xv = C.xpc_int64_create(C.int64_t(val.Uint()))
-
-	case r.String:
-		xv = C.xpc_string_create(C.CString(val.String()))
-
-	case r.Map:
-		xv = C.xpc_dictionary_create(nil, nil, 0)
-		for _, k := range val.MapKeys() {
-			v := valueToXpc(val.MapIndex(k))
-			C.xpc_dictionary_set_value(xv, C.CString(k.String()), v)
-			if v != nil {
-				C.xpc_release(v)
-			}
-		}
-
-	case r.Array, r.Slice:
-		if val.Type() == TYPE_OF_UUID {
-			// array of bytes
-			var uuid [16]byte
-			r.Copy(r.ValueOf(uuid[:]), val)
-			xv = C.xpc_uuid_create(C.ptr_to_uuid(unsafe.Pointer(&uuid[0])))
-		} else if val.Type() == TYPE_OF_BYTES {
-			// slice of bytes
-			xv = C.xpc_data_create(unsafe.Pointer(val.Pointer()), C.size_t(val.Len()))
-		} else {
-			xv = C.xpc_array_create(nil, 0)
-			l := val.Len()
-
-			for i := 0; i < l; i++ {
-				v := valueToXpc(val.Index(i))
-				C.xpc_array_append_value(xv, v)
-				if v != nil {
-					C.xpc_release(v)
-				}
-			}
-		}
-
-	case r.Interface, r.Ptr:
-		xv = valueToXpc(val.Elem())
-
-	default:
-		log.Fatalf("unsupported %#v", val.String())
-	}
-
-	return xv
-}
-
-//export arraySet
-func arraySet(u unsafe.Pointer, i C.int, v C.xpc_object_t) {
-	a := *(*Array)(u)
-	a[i] = xpcToGo(v)
-}
-
-//export dictSet
-func dictSet(u unsafe.Pointer, k *C.char, v C.xpc_object_t) {
-	d := *(*Dict)(u)
-	d[C.GoString(k)] = xpcToGo(v)
-}
-
-// xpcToGo converts an xpc object to a go object
-//
-// note that not all the types are supported, but only the subset required for Blued
-func xpcToGo(v C.xpc_object_t) interface{} {
-	t := C.xpc_get_type(v)
-
-	switch t {
-	case C.TYPE_ARRAY:
-		a := make(Array, C.int(C.xpc_array_get_count(v)))
-		C.XpcArrayApply(unsafe.Pointer(&a), v)
-		return a
-
-	case C.TYPE_DATA:
-		return C.GoBytes(C.xpc_data_get_bytes_ptr(v), C.int(C.xpc_data_get_length(v)))
-
-	case C.TYPE_DICT:
-		d := make(Dict)
-		C.XpcDictApply(unsafe.Pointer(&d), v)
-		return d
-
-	case C.TYPE_INT64:
-		return int64(C.xpc_int64_get_value(v))
-
-	case C.TYPE_STRING:
-		return C.GoString(C.xpc_string_get_string_ptr(v))
-
-	case C.TYPE_UUID:
-		a := [16]byte{}
-		C.XpcUUIDGetBytes(unsafe.Pointer(&a), v)
-		return UUID(a[:])
-
-	default:
-		log.Fatalf("unexpected type %#v, value %#v", t, v)
-	}
-
-	return nil
-}
-
-// xpc_release is needed by tests, since they can't use CGO
-func xpc_release(xv C.xpc_object_t) {
-	C.xpc_release(xv)
-}
-
-// this is used to check the OS version
-
-type Utsname struct {
-	Sysname  string
-	Nodename string
-	Release  string
-	Version  string
-	Machine  string
-}
-
-func Uname(utsname *Utsname) error {
-	var cstruct C.struct_utsname
-	if err := C.uname(&cstruct); err != 0 {
-		return errors.New("utsname error")
-	}
-
-	// XXX: this may crash if any value is exactly 256 characters (no 0 terminator)
-	utsname.Sysname = C.GoString(&cstruct.sysname[0])
-	utsname.Nodename = C.GoString(&cstruct.nodename[0])
-	utsname.Release = C.GoString(&cstruct.release[0])
-	utsname.Version = C.GoString(&cstruct.version[0])
-	utsname.Machine = C.GoString(&cstruct.machine[0])
-
-	return nil
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.c
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.c b/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.c
deleted file mode 100644
index 7bcb83d..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.c
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <dispatch/dispatch.h>
-#include <xpc/xpc.h>
-#include <xpc/connection.h>
-#include <Block.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "_cgo_export.h"
-
-//
-// types and errors are implemented as macros
-// create some real objects to make them accessible to Go
-//
-xpc_type_t TYPE_ERROR = XPC_TYPE_ERROR;
-
-xpc_type_t TYPE_ARRAY = XPC_TYPE_ARRAY;
-xpc_type_t TYPE_DATA = XPC_TYPE_DATA;
-xpc_type_t TYPE_DICT = XPC_TYPE_DICTIONARY;
-xpc_type_t TYPE_INT64 = XPC_TYPE_INT64;
-xpc_type_t TYPE_STRING = XPC_TYPE_STRING;
-xpc_type_t TYPE_UUID = XPC_TYPE_UUID;
-
-xpc_object_t ERROR_CONNECTION_INVALID = (xpc_object_t) XPC_ERROR_CONNECTION_INVALID;
-xpc_object_t ERROR_CONNECTION_INTERRUPTED = (xpc_object_t) XPC_ERROR_CONNECTION_INTERRUPTED;
-xpc_object_t ERROR_CONNECTION_TERMINATED = (xpc_object_t) XPC_ERROR_TERMINATION_IMMINENT;
-
-const ptr_to_uuid_t ptr_to_uuid(void *p) { return (ptr_to_uuid_t)p; }
-
-
-//
-// connect to XPC service
-//
-xpc_connection_t XpcConnect(char *service, void *ctx) {
-    dispatch_queue_t queue = dispatch_queue_create(service, 0);
-    xpc_connection_t conn = xpc_connection_create_mach_service(service, queue, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);
-
-    // making a local copy, that should be made "persistent" with the following Block_copy
-    GoInterface ictx = *((GoInterface*)ctx);
-
-    xpc_connection_set_event_handler(conn,
-        Block_copy(^(xpc_object_t event) {
-            handleXpcEvent(event, (void *)&ictx);
-        })
-    );
-
-    xpc_connection_resume(conn);
-    return conn;
-}
-
-void XpcSendMessage(xpc_connection_t conn, xpc_object_t message, bool release, bool reportDelivery) {
-    xpc_connection_send_message(conn,  message);
-    xpc_connection_send_barrier(conn, ^{
-        // Block is invoked on connection's target queue
-        // when 'message' has been sent.
-        if (reportDelivery) { // maybe this could be a callback
-            puts("message delivered");
-        }
-    });
-    if (release) {
-        xpc_release(message);
-    }
-}
-
-void XpcArrayApply(void *v, xpc_object_t arr) {
-  xpc_array_apply(arr, ^bool(size_t index, xpc_object_t value) {
-    arraySet(v, index, value);
-    return true;
-  });
-}
-
-void XpcDictApply(void *v, xpc_object_t dict) {
-  xpc_dictionary_apply(dict, ^bool(const char *key, xpc_object_t value) {
-    dictSet(v, (char *)key, value);
-    return true;
-  });
-}
-
-void XpcUUIDGetBytes(void *v, xpc_object_t uuid) {
-   const uint8_t *src = xpc_uuid_get_bytes(uuid);
-   uint8_t *dest = (uint8_t *)v;
-
-   for (int i=0; i < sizeof(uuid_t); i++) {
-     dest[i] = src[i];
-   }
-}

http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newt/blob/abf65d3a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.h
----------------------------------------------------------------------
diff --git a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.h b/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.h
deleted file mode 100644
index e2cfb5c..0000000
--- a/newtmgr/vendor/github.com/runtimeinc/gatt/xpc/xpc_wrapper_darwin.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _XPC_WRAPPER_H_
-#define _XPC_WRAPPER_H_
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <xpc/xpc.h>
-
-extern xpc_type_t TYPE_ERROR;
-
-extern xpc_type_t TYPE_ARRAY;
-extern xpc_type_t TYPE_DATA;
-extern xpc_type_t TYPE_DICT;
-extern xpc_type_t TYPE_INT64;
-extern xpc_type_t TYPE_STRING;
-extern xpc_type_t TYPE_UUID;
-
-extern xpc_object_t ERROR_CONNECTION_INVALID;
-extern xpc_object_t ERROR_CONNECTION_INTERRUPTED;
-extern xpc_object_t ERROR_CONNECTION_TERMINATED;
-
-extern xpc_connection_t XpcConnect(char *, void *);
-extern void XpcSendMessage(xpc_connection_t, xpc_object_t, bool, bool);
-extern void XpcArrayApply(void *, xpc_object_t);
-extern void XpcDictApply(void *, xpc_object_t);
-extern void XpcUUIDGetBytes(void *, xpc_object_t);
-
-// the input type for xpc_uuid_create should be uuid_t but CGO instists on unsigned char *
-// typedef uuid_t * ptr_to_uuid_t;
-typedef unsigned char * ptr_to_uuid_t;
-extern const ptr_to_uuid_t ptr_to_uuid(void *p);
-
-#endif