Broadcaster:just transmists the advertising packets.You have to send the information in advertising packets only.A device in the broadcast mode shall send data in either non-connectable undirected or scannable undirected advertising events.
Obersver:A device performing the observation procedure may use passive scanning or active scanning to receive advertising events.
Devices which acts as broadcaster or observer cannot establish connections.
But the observer can receive the data from different advertising device.
Welcome in the forum!
Broadcast (continuosly sending) and observer (continuosly listening) are not supported by BLE. Both will not save energy when working as desired. Have a deep look into this application note www.cypress.com/
Broadcaster and observer are supported by BLE(as per spec).
Check sections 2.2.2 and section 9.1.1, 9.1.2 in vol 3 in ble 4.1 spec.
Yes its correct it would consume more power when continously transmit or continously listen
power consumption depends on advertising interval and scan intervals and also the blocks that are running.You can play these options to reduce the power.
In facts, inside the link Bob kindly posted, I found this description:
Broadcaster: This is an advertising role that is used to broadcast data; this role cannot form BLE connections and engage in data exchange (no request/response operations). This role works similar to a radio station: it sends data continuously without bothering if anyone is listening; it is a one-way data communication. A typical example of a GAP Broadcaster is a beacon, which continuously broadcasts information but does not expect any response.
Observer: This is a listening role that scans for advertisements but does not connect to the advertising device. This is the opposite of the Broadcaster role. This works similar to a radio receiver that can continuously listen for information but cannot communicate back with the information source. A typical example of a GAP Observer is a smartphone app that continuously listens for beacons.
This is a way to use that can properly work for what I want to do. Thanks everyone for answering my question.
Actually the GATT profile already does what you want it to do. When a BLE central device has multiple peripherals connected to it, any changes to GATT attributes are transmitted to the GATT server. So if the peripherals are acting as GATT server, the central device just needs to set GATT atributes, and they are notified.
The other way round the central device (acting as GATT server) can send notifications to the peripherals.
But you also can use the Broadcaster / Observer role with the PSoC4 BLE. Just define your BLE component as a custom profile, and then you can set the Observer or Broadcaster role. Note that the amount of data that can be send is limited - the BLE advertisment package is limited to 31 bytes...
Thank you hli! But my point is to have a device which can send information to other listening devices without creating a connection. However, I knew Cypress BLE products can' t manage more than one connection at the same time, as reported in the BLE FAQ. Is it right?
Also, please take a look at my upcoming problem. I would like to program one of my BLE devices in the following way: it has to work as a server for a smartphone (with the classical paired connection), and, at the same time, as a broadcaster for other BLE devices. In this way, I can send information from my smartphone to the broadcaster, so that it can spread the information to other listening devices.
But I found that a BLE broadcast device can just work as a broadcaster, and so it is not able to maintain connection with a device as well. In facts, differently from Central and Peripheral GAP roles, Broadcaster role is not allowed to manage services and characteristics.
Is it right, or do you think there is a way to make things work as I want? Can a BLE device work as a broadcaster and be pairable at the same time?
Thank you for your help
It should be possible to change the data send with the broadcast with every packet, so you can do kind of larger data transfer with that.
BLE itself should allow to change the role between broadcaster and peripheral (or maybe sender), but I'm not sure whether its possible to do so at the same time. From what I found it might be that this requires more low-level access than you get on PSoC.
I think the statement in the FAQ regarding multiple connections is somewhat misleading (and its still not really clear what it actually means).
Maybe you should open one or more Support cases with Cypress so they can answer, and maybe they have some sample code for you.
All: The statement about multiple connections is intended to highlight that our radio does not manage this for you, but it can be handled in your application layer. You just have to keep track of your connections and effectively "make/break" each one.. it can be done, just not managed yet in the radio hardware... A roadmap feature for sure.. But not at all lost as it can be managed in application firmware.
Cypress BLE allows following combinations for advertising, scanning and connected states.
If device is Connected - Non connectable advertisement (Non connectable undirected and scannable undirected) is allowed.
If device is Scanning - All types of advertisements are allowed.
Moving on to specific questions asked above:
1) Broadcast and Observer role together
Yes this is supported.
Broadcast - Non connectable advertisement.
Observer - Scanning.
As noted above, Cypress device allows both operations simultaneously.
2) GATT server and broadcaster
Yes this is supported. While in connection (GATT server), Cypress BLE allows you to send non connectable advertisement packets (Broadcaster).
I am trying to do something similiar. I have one device which is a Broadcaster and 2 other devices are the observers.
My Broadcaster sends out the data and it changes at some intervals using CyBle_GapUpdateAdvData(cyBle_discoveryModeInfo.advData, cyBle_discoveryModeInfo.scanRspData);
I want my observer to keep receiving the data broadcasted which is not happening due to some reason. I have attached both projects. I am kinda stuck over here.
I want to use the BLE device as a broadcaster as well as a observer (one at a time). An ideal case would be, initially the BLE acts as a observer and upon a random event it will broadcasts a beacon for a finite amount of time and ends up as observer again. How should the BLE component be configured to achieve this?
I can't find any broadcaster and observer option to select.
Your setting for the observers is set to "Duplicate Filtering" which will filter out duplicate packets, this could be the issue.
Also, the data you are sending through the UART is reversed compared with how it is received in the scan-received packet.
for(i = 0u; i < advReport.dataLen; i++)
sprintf(msg,"received -- event= %x\n", advReport.data[advReport.dataLen-i]);
You will need to manually switch between/set the unit to observer and broadcaster simultaneously, as there is no default profile for those settings.