Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

enable setting MACAddr for cyw43439 #280

Merged
merged 1 commit into from
Aug 14, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions hci_cyw43439.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//go:build cyw43439
soypat marked this conversation as resolved.
Show resolved Hide resolved

package bluetooth

const (
ogfVendor = 0x3f

ocfSetBTMACAddr = 0x0001
)

func (a *Adapter) SetBdAddr(address Address) error {
Copy link

@soypat soypat Jul 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a fan of the naming- I'd prefer SetAddress since the type it receives is an Address... or even SetBluetoothAddress

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure I can rename it. The function to get the Bluetooth address was named GetBdAddr which is where the name comes from

return a.hci.setBdAddr(address)
}

func (h *hci) setBdAddr(address Address) error {
hciPacket := make([]byte, len(address.MACAddress.MAC))
// Reverse the byte order as per spec
for i := range address.MACAddress.MAC {
hciPacket[i] = address.MACAddress.MAC[len(address.MACAddress.MAC)-1-i]
}

if err := h.sendWithoutResponse(ogfVendor<<ogfCommandPos|ocfSetBTMACAddr, hciPacket); err != nil {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this documented somewhere? If this is a known HCI command then this should not be behind a cyw43439 build tag.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only works for this board. The opcode is vendor-specific

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then this may belong in cyw43439 repo- given the hci packet header is a constant value and need not full hci logic to build. If the logic in this package is needed then this function may belong in an example directory under cyw43439 that uses this repo. In any case I'd avoid adding this exported API until its clearer it belongs here.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#229 sets the MAC address using a standard opcode - does that work on CYW43439?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried that first! didn't seem to work for me. I have two boards and neither worked with that PR, which is why I looked into the spec to see what was recommended, which is how I arrived at this

return err
}

return nil
}
Loading