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/18 22:58:06 UTC

[2/3] incubator-mynewt-newtmgr git commit: nmxact - Support for 16-bit UUIDs.

nmxact - Support for 16-bit UUIDs.


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

Branch: refs/heads/master
Commit: f51c176772f327348e47752b103b719da26cee08
Parents: c2770f1
Author: Christopher Collins <cc...@apache.org>
Authored: Thu May 18 15:57:20 2017 -0700
Committer: Christopher Collins <cc...@apache.org>
Committed: Thu May 18 15:57:20 2017 -0700

----------------------------------------------------------------------
 nmxact/bledefs/bledefs.go | 41 +++++++++++++++++++++++++++++++++++------
 1 file changed, 35 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-mynewt-newtmgr/blob/f51c1767/nmxact/bledefs/bledefs.go
----------------------------------------------------------------------
diff --git a/nmxact/bledefs/bledefs.go b/nmxact/bledefs/bledefs.go
index 3d7e85b..bf55780 100644
--- a/nmxact/bledefs/bledefs.go
+++ b/nmxact/bledefs/bledefs.go
@@ -157,16 +157,23 @@ func (bd *BleDev) String() string {
 }
 
 type BleUuid struct {
-	Bytes [16]byte
+	// Set to 0 if the 128-bit UUID should be used.
+	Uuid16 uint16
+
+	Uuid128 [16]byte
 }
 
 func (bu *BleUuid) String() string {
+	if bu.Uuid16 != 0 {
+		return fmt.Sprintf("0x%04x", bu.Uuid16)
+	}
+
 	var buf bytes.Buffer
-	buf.Grow(len(bu.Bytes)*2 + 3)
+	buf.Grow(len(bu.Uuid128)*2 + 3)
 
 	// XXX: For now, only support 128-bit UUIDs.
 
-	for i, b := range bu.Bytes {
+	for i, b := range bu.Uuid128 {
 		switch i {
 		case 4, 6, 8, 10:
 			buf.WriteString("-")
@@ -181,6 +188,14 @@ func (bu *BleUuid) String() string {
 func ParseUuid(uuidStr string) (BleUuid, error) {
 	bu := BleUuid{}
 
+	// First, try to parse as a 16-bit UUID.
+	val, err := strconv.ParseUint(uuidStr, 0, 16)
+	if err == nil {
+		bu.Uuid16 = uint16(val)
+		return bu, nil
+	}
+
+	// Try to parse as a 128-bit UUID.
 	if len(uuidStr) != 36 {
 		return bu, fmt.Errorf("Invalid UUID: %s", uuidStr)
 	}
@@ -199,7 +214,7 @@ func ParseUuid(uuidStr string) (BleUuid, error) {
 			if err != nil {
 				return bu, fmt.Errorf("Invalid UUID: %s", uuidStr)
 			}
-			bu.Bytes[boff] = byte(u64)
+			bu.Uuid128[boff] = byte(u64)
 			i += 2
 			boff++
 		}
@@ -209,10 +224,20 @@ func ParseUuid(uuidStr string) (BleUuid, error) {
 }
 
 func (bu *BleUuid) MarshalJSON() ([]byte, error) {
-	return json.Marshal(bu.String())
+	if bu.Uuid16 != 0 {
+		return json.Marshal(bu.Uuid16)
+	} else {
+		return json.Marshal(bu.String())
+	}
 }
 
 func (bu *BleUuid) UnmarshalJSON(data []byte) error {
+	// First, try a 16-bit UUID.
+	if err := json.Unmarshal(data, &bu.Uuid16); err == nil {
+		return nil
+	}
+
+	// Next, try a 128-bit UUID.
 	var s string
 	if err := json.Unmarshal(data, &s); err != nil {
 		return err
@@ -228,7 +253,11 @@ func (bu *BleUuid) UnmarshalJSON(data []byte) error {
 }
 
 func CompareUuids(a BleUuid, b BleUuid) int {
-	return bytes.Compare(a.Bytes[:], b.Bytes[:])
+	if a.Uuid16 != 0 || b.Uuid16 != 0 {
+		return int(a.Uuid16) - int(b.Uuid16)
+	} else {
+		return bytes.Compare(a.Uuid128[:], b.Uuid128[:])
+	}
 }
 
 type BleScanFilterPolicy int