Yep, except for one typo: ble_hw_get_public_addr() instead of 
ble_hs_get_public_addr().

I should have mentioned that, assuming we agree to this, the controller code 
will call that API and the host should not call it. I mentioned this API in 
case someone wants to modify how it works for them.

Thanks for clarifying that! (and reading that long email)

Will

> On Mar 31, 2017, at 4:28 PM, Christopher Collins <[email protected]> wrote:
> 
> On Fri, Mar 31, 2017 at 03:49:05PM -0700, will sanfilippo wrote:
>> Hello:
>> 
>> There has been some discussion of this already on the list but nothing has 
>> been done yet so I wanted to resurrect the conversation with some proposals.
>> 
>> What we are trying to do here is the following:
>> 1) Have the controller get a public device address without it being 
>> hardcoded.
>> 2) Have the ability to read a chip-specific random static address if the 
>> chip has one programmed.
>> 
>> The proposal is the following:
> 
>> 1) Add two new API. These will be platform specific and will be placed
>> in the ble_hw.c file:
> 
>> /* These API will return -1 if no address available. If available, will
>> return 0
>> and will place the address in *addr */
>> int ble_hw_get_public_addr(ble_addr_t *addr)
>> int ble_hw_get_static_addr(ble_addr_t *addr)
> 
> [...]
> 
> That sounds good to me.  This covers all the use cases I can think of.
> 
> As you mentioned, Bluetooth is somewhat asymmetric regarding public and
> random addresses.  The controller is in charge of the public address
> while the host is in charge of the static random address.
> 
> With the API you proposed, I think the workflow would look something
> like this:
> 
> 1. At init time, controller calls ble_hs_get_public_addr().  If this
> call yields an address, the controller configures itself to use it.
> 
> 2. If app wants a static random address, it calls
> ble_hw_get_static_addr().  If a random address is available, the
> application configures the host to use it with a call to
> ble_hs_id_set_rnd().
> 
> Does that sound about right?
> 
> In thinking about this, I realized the host interface is missing
> something.  There is currently no way for an application to ask the host
> for its public address.  An application may want to know this to
> determine if it should configure a random address (or just for
> reporting purposes).  The host does know its own public address--it gets
> it from the controller at startup--it just doesn't expose it to the
> application.
> 
> Chris

Reply via email to