Smart Bluetooth Forum Discussions
We have a device which has multiple characteristics exposed via GATT. Now, we have some of them where the user should be able to wait for indications or notifications. As from the examples and the code generated from the wizard, we learned, that a indication is acknowledged by the peer and until the acknowledgment is received, no other indication is sent. Is this only valid for each characteristic or are all indications paused until the acknowledgement is received?
As we have multiple characteristics which are updated by the device at the same time and the probability that some of them change the value at the same time, we would like to ensure the peer receives not only the first indication. If possible, we would send out the updates at the same time without waiting for the acknowledgement of the first characteristic.
Is this possible at all?
Show LessI need a documentation about API explenations for BLE or Wiced Sense. Where can i find this doıcument?
Hi all,
We added scan response to our project (BCM20736S and SDK 2.2.2) and are having problems. It have a memory leak issue that eventually leads to a code freeze and our Watchdog resets us. If I remove the scan response code then the problem goes away:
#define DATA_LENGTH_NVRAM 4
#define APP_VERSION_MAJOR 1 // Maximum is 99
#define APP_VERSION_MINOR 7 // Maximum is 255
// Scan response field
BLE_ADV_FIELD scr[3];
UINT8 data_info = 100;
void update_scanrspdata(void)
{
UINT8 id_array[6*DATA_LENGTH_NVRAM]; // 24 bytes
UINT8 data_count;
scr[0].len = 1 + 1;
scr[0].val = ADV_FLAGS;
scr[0].data[0] = LE_GENERAL_DISCOVERABLE | BR_EDR_NOT_SUPPORTED;
scr[1].len = 2 + 1;
scr[1].val = ADV_MANUFACTURER_DATA;
scr[1].data[0] = APP_VERSION_MAJOR;
scr[1].data[1] = APP_VERSION_MINOR;
bleprofile_ReadNVRAM(NVRAM_DATA_COUNT, 1, &data_count);
bleprofile_ReadNVRAM(NVRAM_DATA, (6*DATA_LENGTH_NVRAM), id_array);
// Byte count: 1 data info + 1 data count + 24 (6 Numbers)
scr[2].len = 2 + 6*DATA_LENGTH_NVRAM + 1;
scr[2].val = ADV_SERVICE_DATA;
scr[2].data[0] = data_info;
scr[2].data[1] = data_count;
BT_MEMCPY(&scr[2].data[2], id_array, (6*DATA_LENGTH_NVRAM));
// Update scan response
blecm_setScanRspData((UINT8*)scr, (scr[0].len + scr[1].len + scr[2].len + 1));
}
We think the problem could be with the second parameter of "blecm_setScanRspData(x, y)" function. What is the count that we have to pass there?
Or maybe the stack can't handle the 24 bytes of the id_array?
Any ideas?
Thanks!
Cheers,
Gil
Show LessHi all,
we are using a BCM20737S on a custom PCB, and have another question left:
From the comments in the forum, I assume the BCM20737S is using ThreadX as RTOS (please correct me if I am wrong) and that the custom code is only called from the RTOS when needed (on startup, on pairing, on a timer event, on an interrupt etc...). Most of our tasks involve I2C communication and are very short and not sensitive to errors, so we never had problems. But if we would like to do some longer and timing-sensitive communication via I2C which takes around 10 seconds, is there a way to ensure the current function is not interrupted and the thread is not suspended during execution?
(or are the I2C functions like cfa_bsc_OpExtended already giving a warranty that they are not interrupted during communication? An interrupt outside of the I2C transaction itself is probably easy to handle and likely very short).
Thanks for any answer or thoughts.
Show LessOn the BCM20736S, we are trying to wake on various GPIOs, For the most part, this is working fine. But about 20% of the time we see the BCM20736S wake into the registered GPIO callback instead of going through the normal wake cycle.
Any ideas one why this might be happening?
Thanks in advance,
Aaron
Show LessIs there a way to force a software reset on the BCM20736S? I would like to call a function from code that is as close to an external reset as possible.
Thanks,
Aaron
Show LessHello everybody
I have wiced sense kit and for example I want to use second button on the kit which is user button and want to get sound from buzzer
I look the kit shematics and learnt that user button is on Pin 4
In the firmware code GPIO_PIN_P4 is used for GPIO interrupt.
So how can I write the code that when user button is pressed make a sound
I tried simply this one ::::
if (GPIO_PIN_P4 == 1){
wiced_sense_short_beep_buzzer(100);
}
But didnt work. Can someone help me abouth that thanks a lot....
Show LessHi i'm new in using Wicedsense sensor tag. I have two sensor devices, device1 and device2, in one I have factory firm and in the second one other firmware which is not the factory firmware. Now, I have face the following scenario. First, I am able to connect to the factory loaded firmware in device1 and get all the readings such as temperature , pressure , humidity etc. Second, when I switch too device2 which has the new firmware which is not factory loaded (I use wicedsense explorer to observe whether any reading are sent). And as expected no reading are sent. Third, i turn off device2 and connect to device1 but this time it is loads with device2 characteristics.
I think the reason this is happening is because both the devices have the mac address. So, I want know whether I am going in the right direction or not. I am fairless new to this field so any kind of help is appreciated.
Show LessHi all,
I have a custom board with BCM20736S connected to the UART1 of a microcontroller. On the board there is also an external connector with the UART2.
See schematic:
I want to program the BLE device and I do it in this way (I have no access directly to the UART pins of bcm):
FTDI connected to UART2;
A simple code on MCU sends everything that arrive on the UART2 to UART1.
With this configuration I try to program the BLE with WICED IDE, it finds the device but the download fails (see screenshot)
I also try the Reset Test described in the application note "Manufacturing Bluetooth Test Tool" and the BLE chip replies correctly (see screenshot)
What is the problem?
Kind regards,
Marco
Show LessHi all,
after having an almost finished firmware for our custom board with the BCM20737S, we have one last technical question: Where should we store device specific information like serial numbers and hardware model information that should survive an OTA upgrade?
Is VS1 in the NVRAM a good place for this?
If so, how can we access it properly? Which vsID should we take, which are occupied for other things?
Is there a recommended way to store data in VS1 during flashing? (beside just inserting into the Intel HEX with own tools, which is not a big deal)
We plan to produce two almost similar devices with some physical parts missing on a specific model. We cannot detect the differences of the device. The firmware is almost identical for both devices and has the same services and characteristics.
It is our favored solution to have the same firmware on all devices, with the model information in NVRAM.
Alternatively, we could deploy multiple different firmwares with the changes compiled in (e.g. with defines in the makefile).
What would you prefer in my situation?
Show Less