prototooth/winbt/winbt.go
deadprogram a55e2194c5 domain: use custom domain for all uses of winbt subpackage
Signed-off-by: deadprogram <ron@hybridgroup.com>
2020-09-09 16:04:40 +02:00

63 lines
2.2 KiB
Go

// Package winbt provides a thin layer over the WinRT Bluetooth interfaces. It
// is not designed to be used directly by applications: the bluetooth package
// will wrap the API exposed here in a nice platform-independent way.
//
// You can find the original *.idl and *.h files in a directory like this,
// after installing the Windows SDK:
//
// C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt
//
// Some helpful articles to understand WinRT at a low level:
// https://blog.xojo.com/2019/07/02/accessing-windows-runtime-winrt/
// https://docs.microsoft.com/en-us/archive/msdn-magazine/2013/august/windows-with-c-the-windows-runtime-application-model
// https://blog.magnusmontin.net/2017/12/30/minimal-uwp-wrl-xaml-app/
// https://yizhang82.dev/what-is-winrt
// https://www.slideshare.net/goldshtn/deep-dive-into-winrt
//
package winbt // import "tinygo.org/x/bluetooth/winbt"
import (
"github.com/go-ole/go-ole"
)
var (
IID_IBluetoothLEAdvertisementReceivedEventArgs = ole.NewGUID("27987DDF-E596-41BE-8D43-9E6731D4A913")
IID_IBluetoothLEAdvertisementWatcherStoppedEventArgs = ole.NewGUID("DD40F84D-E7B9-43E3-9C04-0685D085FD8C")
)
// printGUIDs prints the GUIDs this IInspectable implements. It is primarily
// intended for debugging.
func printGUIDs(inspectable *ole.IInspectable) {
guids, err := inspectable.GetIids()
if err != nil {
println("could not get GUIDs for IInspectable:", err.Error())
return
}
for _, guid := range guids {
println("guid:", guid.String())
}
}
// makeError makes a *ole.OleError if hr is non-nil. If it is nil, it will
// return nil.
// This is an utility function to easily convert an HRESULT into a Go error
// value.
func makeError(hr uintptr) error {
if hr != 0 {
return ole.NewError(hr)
}
return nil
}
// mustSucceed can be called to check the return value of getters, which should
// always succeed. If hr is non-zero, it will panic with an error message.
func mustSucceed(hr uintptr) {
if hr != 0 {
// Status is a getter, so should never return an error unless
// an invalid `v` is passed in (for example, `v` is nil) - in
// which case, there is definitely a bug and we should fail
// early.
panic("winbt: unexpected error: " + ole.NewError(hr).String())
}
}