This is unnecessary because the values are passed by value in other
cases, and can in some cases lead to more (heap or stack) allocation
than is necessary.
This is a big rewrite to use DBus calls directly instead of going
through go-bluetooth first.
This is a big change, but I believe it is an improvement. While the
go-bluetooth works for many cases, it's a layer in between that I
believe hurts more than it helps. Without it, we can just program
directly against the BlueZ D-Bus API. The end result is about 10% more
code.
With this rewrite, I fixed the following issues:
* All MapToStruct warnings are gone, like in
https://github.com/tinygo-org/bluetooth/issues/193.
* Advertisements can be restarted after they were stopped. Previously
this resulted in a panic.
* Looking at the source code of go-bluetooth, it appears that it
includes devices from a different Bluetooth adapter than the one
that's currently scanning. This is fixed with the rewrite.
* Fix a bug in Adapter.AddService where it would only allow adding a
single service. Multiple services can now be added.
This was actually the motivating bug that led me down to rewrite the
whole thing because I couldn't figure out where the bug was in
go-bluetooth (it's many layers deep).
* The `WriteEvent` callback in a characteristic now also gets the
'offset' parameter which wasn't provided by go-bluetooth.
This rewrite also avoids go-bluetooth specific workarounds like
https://github.com/tinygo-org/bluetooth/pull/74 and
https://github.com/tinygo-org/bluetooth/pull/121.
I have tested all examples in the smoketest-linux Makefile target. They
all still work with this rewrite.
Previously the list of services and characteristics wasn't sorted, and
because of the way Go maps work they were in fact randomized.
This commit fixes the sorting for services and characteristics, which
both suffered from the same lack of sorting.
This fixes https://github.com/tinygo-org/bluetooth/issues/135.
This is very much like https://github.com/tinygo-org/bluetooth/pull/161,
but for Linux instead. In fact, I've copied the structure of the code
because it works for macOS.
I have tested that the scan order is now as requested. I also verified
that multiple characteristics with the same UUID are now supported, but
support is still a bit buggy: they appear in a random order (due to Go
map iteration order). I will fix this in the next commit.
* gattc: use UUID() to allow for bare metal to permit clean use of short UUIDs
Signed-off-by: deadprogram <ron@hybridgroup.com>
* gattc/macos: correct usage of UUID wrapper type alias
Signed-off-by: Ron Evans <ron@hybridgroup.com>
* gattc/sd: correct usage of UUID wrapper type alias
Signed-off-by: Ron Evans <ron@hybridgroup.com>
* gattc/sd, uuid/sd: changes intended to reduce memory allocations for service and characteristic discovery
Signed-off-by: deadprogram <ron@hybridgroup.com>
* gattc/sd: partial improvements to DiscoverServices/DiscoverCharacteristics
Signed-off-by: deadprogram <ron@hybridgroup.com>
* gattc/sd: mostly getting uuid back for services in DiscoverServices
Signed-off-by: deadprogram <ron@hybridgroup.com>
* uuid/sd: correct way to calculate UUID from shortUUID
Signed-off-by: deadprogram <ron@hybridgroup.com>
* gattc/sd: able to discover services and characteristics
Signed-off-by: deadprogram <ron@hybridgroup.com>
* examples: updated discover example that can run with OS or bare metal
Signed-off-by: deadprogram <ron@hybridgroup.com>
* gattc/sd: ensure safe casts for length of returned struct when converting short UUID
Signed-off-by: deadprogram <ron@hybridgroup.com>