Date   

Re: Looking for help with SAMD2x

Bryan O'Donoghue
 

On 16/11/2018 17:28, Kumar Gala wrote:
Guys,
I’m looking to see if someone (or group) can help with maintenance of the Atmel SAMD2x SoC family. We have a few things that need updating (like the watchdog driver). And need someone I can check in w/from time to time if there are questions or we need testing on a board.
Let me know if you can help in the short term with converting drivers/watchdog/wdt_sam0.c to use the new watchdog API.
[ I also have a question about testing flash support ]
Hi,

Got buried in my inbox. Happy to help.

I'm currently winding down a project on the SAM21 - I was planning on looking at the USB.

I don't mind running some updates/tests/reviews as needed. Here to help, let me know what's required I can make time.


Insufficient space for ccc even after unpair

dhguja@gmail.com
 

Hello,

In the current upstream, i face the below problem with BLE and settings.
I am running HID peripheral sample on nRF52832 board. I made a modification to call bt_unpair() before starting the advertisement.
This ensures that unpair is called everytime i reset the device and i am able to connect to next device(since CONFIG_BT_MAX_PAIRED = 1).
This is just to minimize my real application scenario to be able to connect to new host and also to reproduce this issue.

1) connect board to first android phone. device is connected and bonded.
2) Now i restart the device and also switch off BLE in the first phone.
3) connect board to second android phone. device is connected and bonded.
4) Now i restart the device and also switch off BLE in the second phone.
5) connect board to third phone. device is connected and bonded.
6) Now a warning is printed in the logs as below
   "<wrn> bt_gatt: bt_gatt_attr_write_ccc: No space to store CCC cfg"
7) This happens when host subscribes for HID service. CCC is not updated. This affects the ability to send data to this third host.

I also saw that bt_gatt_clear_ccc() is called inside bt_unpair(). Hence i made sure to call so that i will have clear space for the new host i want to connect to. But still i get this warning everytime on the third host i want to connect.

Is this a bug or should i call a different API than bt_unpair() to clear the space for the new host i want to connect to? 

Dhananjay GJ


Re: HCI Host Not enough space in buffer #hci

Johan Hedberg
 

Hi,


On 23 Nov 2018, at 20.37, abaska@intermatic.com wrote:
I have a HCI host and controller setup. When the host starts, and the controller had already been running, it sometimes begins reading in the middle of a HCI message from the controller. It reads the wrong HCI message type and length. This causes the buffer to completely fill where it errors out in h4.c, read_payload(), BT_ERR("Not enough space in buffer"). After this the host application does not recover and a power cycle is needed.

I found a quick fix for this is to remove a line in h4.c read_payload(). I think it was meant to discard the rest of a message data if the buffer is full, but it looks like its assuming rx.remaining is valid. In this case, rx.remaining is invalid because it read the wrong byte as the length when it jumped into the middle of a HCI message.
if (rx.remaining > net_buf_tailroom(rx.buf)) {
BT_ERR("Not enough space in buffer");
//rx.discard = rx.remaining; // fixes issue. it was discarding thousands of bytes
reset_rx();
return;
}
I don't know what other consequences this quick fix will have. Is there a better way to fix this issue? Maybe check the message validity before it fills up the buffer?
Basically the code is assuming that the packet is valid, but the buffer sizes have simply been defined too small to fit the packet. In such a case discarding the rx.remaining bytes would be the correct thing since then the driver skips a valid but too long packet. In the case that you’re getting corrupt data (starting in the middle of a packet) it’s all a guessing game. You could discard everything indicated, like it does now, or try again with the next byte (in which case you’ll be repeating this until you get something that makes sense). Since the code needs to read (i.e. jump forward) at least the H4 + ACL/event headers, you don’t have any guarantee that you’ll ever hit a clean packet boundary.

I’m not sure there’s any correct answer in how the host should behave, since either way this is an unreliable setup: you should ideally design your device so that you can force a reset of the controller (e.g. by power-cycling it) so that you know you start off in a known state.

Johan


HCI Host Not enough space in buffer #hci

@abaska
 

Hi,

I have a HCI host and controller setup. When the host starts, and the controller had already been running, it sometimes begins reading in the middle of a HCI message from the controller. It reads the wrong HCI message type and length. This causes the buffer to completely fill where it errors out in h4.c, read_payload(), BT_ERR("Not enough space in buffer"). After this the host application does not recover and a power cycle is needed.

I found a quick fix for this is to remove a line in h4.c read_payload(). I think it was meant to discard the rest of a message data if the buffer is full, but it looks like its assuming rx.remaining is valid. In this case, rx.remaining is invalid because it read the wrong byte as the length when it jumped into the middle of a HCI message.
    if (rx.remaining > net_buf_tailroom(rx.buf)) {
      BT_ERR("Not enough space in buffer");
      //rx.discard = rx.remaining; // fixes issue. it was discarding thousands of bytes
      reset_rx();
      return;
    }
I don't know what other consequences this quick fix will have. Is there a better way to fix this issue? Maybe check the message validity before it fills up the buffer?

Thanks


Re: Extracting iBeacon Advertisement Packets

Luiz Augusto von Dentz
 

Hi Martin,

There is an API to help parsing advertisements:

https://github.com/zephyrproject-rtos/zephyr/blob/master/include/bluetooth/bluetooth.h#L480

It will call the callback given for each data type found, for instance
the sample on the site has flags + manufacturer data, you probably are
only interested in the second. You can also parse the UUID using:

https://github.com/zephyrproject-rtos/zephyr/blob/master/include/bluetooth/uuid.h#L48

On Thu, Nov 22, 2018 at 12:50 AM Martin <ma@jgs-wg.de> wrote:

Sorry, I was copying the wrong code..

int i;

//print adv. packet
for(i=0;i<buf->len;i++) {
printk("%d %02X\n",i, buf->data[i]);
}

//print major
printk("maj: %d\n",((buf->data[25] & 0xff) * 0x100 + (buf->data[26] & 0xff) ));
Am Mi., 21. Nov. 2018 um 18:12 Uhr schrieb Martin <ma@jgs-wg.de>:

Well, simple enough.

int i;

for(i=0; i<5; i++) {
printf("i%d\n", i+1);
}

prints the advertisement packet's bytes in decimals and includes the
UUID acc. to the kontakt.io article. Hope this helps anyone...

Martin
Am Mi., 21. Nov. 2018 um 17:56 Uhr schrieb Martin <ma@jgs-wg.de>:

Hi,
I am quite new to Zephyr and want to extract iBeacon Advertisement
Packets. I already have access to them as a net_buf_simple structure,
but I want to read the major and minor for example. I realize that I
have to probably read some certain bytes out of net_buf_simple
(according to https://support.kontakt.io/hc/en-gb/articles/201492492-Advertising-packet-structure).
Can someone point me to a direction (function) to do this?

Thanks,
Martin




--
Luiz Augusto von Dentz


Re: How to flash static mac address into zephyr ? #nrf52832

frv
 

Sorry Joe, I will no longer this.
Thanks for reporting it.
Frank


Re: How to flash static mac address into zephyr ? #nrf52832

Johannes Hutter
 

btw, Frank: Are you editing your messages over the web interface? It really scrambles up the threads on the mailing list and it's hard to tell what was edited.

On Thu, Nov 22, 2018 at 10:03 AM icephyr <sxzxchen@...> wrote:
Thanks you guys, it helps a lot. I think this will solve my problem, I will have a try then.



--

Johannes Hutter
Mail: johannes@... 



Workaround GmbH (ProGlove)  
Building 64.08a,
Rupert-Mayer-Straße 44, 81379 München


Managing Director: Thomas Kirchner 
HRB: 216605 | AG München 
USt.-IdNr.: DE298859320



Re: How to flash static mac address into zephyr ? #nrf52832

icephyr
 

Thanks you guys, it helps a lot. I think this will solve my problem, I will have a try then.


Re: How to flash static mac address into zephyr ? #nrf52832

Johannes Hutter
 

Just for your information: There is a PR that adds UICR support to the nrfx flash driver:
https://github.com/zephyrproject-rtos/zephyr/pull/11410

Best Regards
Joe


On Thu, Nov 22, 2018 at 9:55 AM frv <F.Vieren@...> wrote:

[Edited Message Follows]

Hi icephyr,

I'm far from a Zephyr BLE expert, but I had this process in mind what could be a solution.

As Nordic doesn't store a public BLE device address in flash I would try to implement the following steps:
Good luck.

Best regards,
Frank



--

Johannes Hutter
Mail: johannes@... 



Workaround GmbH (ProGlove)  
Building 64.08a,
Rupert-Mayer-Straße 44, 81379 München


Managing Director: Thomas Kirchner 
HRB: 216605 | AG München 
USt.-IdNr.: DE298859320



Re: How to flash static mac address into zephyr ? #nrf52832

frv
 
Edited

Hi icephyr,

I'm far from a Zephyr BLE expert, but I had this process in mind what could be a solution.

As Nordic doesn't store a public BLE device address in flash I would try to implement the following steps:
Good luck.

Best regards,
Frank


How to flash static mac address into zephyr ? #nrf52832

icephyr
 

Hi guys,

    I met a problem and hope someone can help me here.

    I want to use nrf52832 as a tag device and can locate it by its mac address, so I have to flash pre-assigned static address into nrf52832 running zephyr project, since nrf chip don't have a pre-assigned mac address. 

    I wonder if there is any method to implement this function ? 

   Thanks  a lot if anyone can help.


Re: Extracting iBeacon Advertisement Packets

Martin <ma@...>
 

Sorry, I was copying the wrong code..

int i;

//print adv. packet
for(i=0;i<buf->len;i++) {
printk("%d %02X\n",i, buf->data[i]);
}

//print major
printk("maj: %d\n",((buf->data[25] & 0xff) * 0x100 + (buf->data[26] & 0xff) ));
Am Mi., 21. Nov. 2018 um 18:12 Uhr schrieb Martin <ma@jgs-wg.de>:


Well, simple enough.

int i;

for(i=0; i<5; i++) {
printf("i%d\n", i+1);
}

prints the advertisement packet's bytes in decimals and includes the
UUID acc. to the kontakt.io article. Hope this helps anyone...

Martin
Am Mi., 21. Nov. 2018 um 17:56 Uhr schrieb Martin <ma@jgs-wg.de>:

Hi,
I am quite new to Zephyr and want to extract iBeacon Advertisement
Packets. I already have access to them as a net_buf_simple structure,
but I want to read the major and minor for example. I realize that I
have to probably read some certain bytes out of net_buf_simple
(according to https://support.kontakt.io/hc/en-gb/articles/201492492-Advertising-packet-structure).
Can someone point me to a direction (function) to do this?

Thanks,
Martin




Re: Extracting iBeacon Advertisement Packets

Martin <ma@...>
 

Well, simple enough.

int i;

for(i=0; i<5; i++) {
printf("i%d\n", i+1);
}

prints the advertisement packet's bytes in decimals and includes the
UUID acc. to the kontakt.io article. Hope this helps anyone...

Martin
Am Mi., 21. Nov. 2018 um 17:56 Uhr schrieb Martin <ma@jgs-wg.de>:


Hi,
I am quite new to Zephyr and want to extract iBeacon Advertisement
Packets. I already have access to them as a net_buf_simple structure,
but I want to read the major and minor for example. I realize that I
have to probably read some certain bytes out of net_buf_simple
(according to https://support.kontakt.io/hc/en-gb/articles/201492492-Advertising-packet-structure).
Can someone point me to a direction (function) to do this?

Thanks,
Martin



Extracting iBeacon Advertisement Packets

Martin <ma@...>
 

Hi,
I am quite new to Zephyr and want to extract iBeacon Advertisement
Packets. I already have access to them as a net_buf_simple structure,
but I want to read the major and minor for example. I realize that I
have to probably read some certain bytes out of net_buf_simple
(according to https://support.kontakt.io/hc/en-gb/articles/201492492-Advertising-packet-structure).
Can someone point me to a direction (function) to do this?

Thanks,
Martin


Re: Zephyr BLE Controller Nordic - BLE qualification process

frv
 

Hi Luiz Augusto von Dentz,

Thank you very much for your reply. This should give me sufficient direction to go further. 

The idea for our BLE central oriented platform (two boards solution) is to run on the BLE Host board Linux and thus depending on BlueZ. The BLE controller runs on a Nordic board Zephyr (HCI_UART).
Both boards will be bridged via a HCI uart(h4) transport layer.

Our BLE peripheral oriented platform might be a pure single board Nordic BLE Host Controller approach depending on Nordic's SoftDevice for the BLE stack.

Best regards,
Frank 


Re: Zephyr BLE Controller Nordic - BLE qualification process

Luiz Augusto von Dentz
 

Hi,
On Wed, Nov 21, 2018 at 10:39 AM frv <F.Vieren@televic.com> wrote:

[Edited Message Follows]

Hi Carles,

Probably all is here for the qualification process, correct? : https://www.bluetooth.com/develop-with-bluetooth/qualification-listing
There is a listing for the Host Stack as well:

https://launchstudio.bluetooth.com/ListingDetails/70189

Just wondering do we have extra concerns should we rely on the BlueZ stack at Host side except for the GPL licensing.
Probably when relying on QT which is LGPL and wraps the BlueZ stack we don't have issues around strict GPL licensing?
Is your system going to run Zephyr or Linux/BlueZ as host stack? BlueZ
daemon is GPL but that exposes APIs over D-Bus so you are not really
linking to it, that said the qualification for BlueZ also depends on
the Kernel. There is quite a few listings of BlueZ:

https://launchstudio.bluetooth.com/ListingDetails/65535
https://launchstudio.bluetooth.com/ListingDetails/48333
https://launchstudio.bluetooth.com/ListingDetails/507
https://launchstudio.bluetooth.com/ListingDetails/12555
https://launchstudio.bluetooth.com/ListingDetails/7341
https://launchstudio.bluetooth.com/ListingDetails/17086
https://launchstudio.bluetooth.com/ListingDetails/7319

From looks of them the latest BlueZ listing is for version 5.48,
though depending on the product they may have only some layers
qualified not the entire stack.

Update 9h38 21/11/2018 :
Our company has a SIG account, so I have registered for a user account, to be able to fetch documentation and ask questions.

Best regards,
Frank


--
Luiz Augusto von Dentz


Re: Zephyr BLE Controller Nordic - BLE qualification process

frv
 
Edited

Hi Carles,

Probably all is here for the qualification process, correct? : https://www.bluetooth.com/develop-with-bluetooth/qualification-listing

Just wondering do we have extra concerns should we rely on the BlueZ stack at Host side except for the GPL licensing.
Probably when relying on QT which is LGPL and wraps the BlueZ stack we don't have issues around strict GPL licensing?

Update 9h38 21/11/2018 :
Our company has a SIG account, so I have registered for a user account, to be able to fetch documentation and ask questions. 

Best regards,
Frank


Zephyr BLE Controller Nordic - BLE qualification process

frv
 

Hi Carles,

 

In the document: https://www.zephyrproject.org/building-a-qualified-ble-controller-with-zephyr-os-1-9/

at the end this is mentioned:

 

“Note that Nordic’s qualification will only cover the BLE Controller, which means that whichever Host is used for a particular design will have to be qualified independently.”

 

What does this really imply for us? Is there an official procedure from the SIG or some other authority that must be followed. Is this documented somewhere?

 

Thanks in advance.

Best regards,

Frank


Re: Zephyr BLE Controller Nordic HW no longer related to SoftDevice?

frv
 

Hi Carles,

Great! Thanks for your confirmation on my observations regarding the Nordic SoftDevice and the Zephyr implementation.

I think for a BLE host (central role) implementation we will forward for the 2 boards solutions, running on the BLE host board a Linux OS that uses a BLE SW framework (e.g. QT BLE) that is BlueZ based and using the Nordic HW board as connectivity chip, the BLE controller based on Zephyr. 

Nevertheless if Nordic's PC BLE driver SW stack becomes more mature and stable it might also be a solution.
However my experience with running Zephyr on the Nordic nRF52 is so far great, so it will be hard to move back to the "serialization solution" of Nordic that is also nice. 

Best regards,
Frank


Re: Zephyr BLE Controller Nordic HW no longer related to SoftDevice?

Carles Cufi
 

Hi Frank,

 

The SoftDevice is Nordic’s proprietary BLE protocol stack. It consists of a binary blob that is flashed at the beginning of the flash memory and can be accessed through SV calls, and it is designed to be the arbitrator to control access to certain hardware on the chip. This is incompatible with Zephyr, which already includes a completely different BLE stack which is open source and located in subsys/bluetooth/.

So the answer to your first question is that the SoftDevice cannot be combined with Zephyr, and you should not need to do so since Zephyr already has its own BLE stack.

 

The answer to the second question is also “yes”. The SoftDevice doesn’t expose an HCI interface, making it unsuitable for use as a BLE Controller, which is what BlueZ requires. Zephyr on the other hand can be built to expose an HCI interface (hci_uart) to work with BlueZ.

 

Carles

 

From: devel@... <devel@...> On Behalf Of frv
Sent: 20 November 2018 10:53
To: devel@...
Subject: [Zephyr-devel] Zephyr BLE Controller Nordic HW no longer related to SoftDevice?

 

Hi Community, Carles,

 

Without having looking into the details for the HCI_UART implementation when using Zephyr RTOS as SW platform for implementing the BLE controller on Nordic HW, the SoftDevice is no longer present in the SW stack. Correct?

 

Is it further correct to say that the SoftDevice SW which is Nordic specific replaces the standard HCI way on which BlueZ is based.  

 

I base my understandings on this nice written document:

https://www.zephyrproject.org/building-a-qualified-ble-controller-with-zephyr-os-1-9/

 

Thanks in advance,

Best regards,

Frank

2281 - 2300 of 7734