Hello. When you say the phone cannot detect the iBeacon, do you mean that the BLE device is not shown among the scanned devices or that the phone cannot connect to the device?
Looking at the diagram, you are using some kind of BLE sniffer and are seeing the advertisement packets from iBeacon. So iBeacon is advertising, which means your phone should be able to pick it up. If you are using an app like LightBlue, the name of the device might be something else, because it remembers the name of the device detected before for the same BD address. Or if your phone has already paired with a BLE device with the same BD address before, it filters out the device when scanning. So don't forget to "forget" any BLE devices that used the same BD address as iBeacon.
If you want to connect to iBeacon, you'll have to change Adv PDU type, which I'm assuming is what you want to do, because that's the only difference in the little red box in the diagram.
Unfortunately, if you are using ibeacon.a, I don't think you can change the Adv PDU Type.
However, there are some workarounds.
Method 1. ibeacon_managed
In our SDK, there's an app called ibeacon_managed.
It changes the advertisements to connectable when the button is pressed. This happens in the interrupt_handler for the button by using bleprofile_Discoverable(HIGH_UNDIRECTED_DISCOVERABLE, NULL);
Method 2. mybeacon
There's another app called mybeacon. It acts like iBeacon but without the use of ibeacon.a library. So you have more free as to what you do with your advertisement packet. You can set both advertisement parameters and the packet itself.
bleprofile_startAdv is used to set the advertisement parameters. The first argument to this function is what changes the advertisement type.
0x00 : ADV_IND
0x02 : ADV_DISCOVER_IND
0x03 : ADV_NONCONN_IND
Please let us know if this was helpful or not.
Very thanks and very very excellent reply.