Acknowledged
CIQQA-4732

[Feature Request] Support BLE GAP Broadcaster / Short-Burst Advertising in Toybox.BluetoothLowEnergy

Currently, the `Toybox.BluetoothLowEnergy` module is strictly limited to the BLE Central (GATT Client / Scanner) role. We request the addition of a scoped GAP Broadcaster API allowing Connect IQ applications to transmit short, non-connectable BLE advertising frames with custom Manufacturer Specific Data and Local Name.

Problem Statement & Real-World Use Case:

Modern outdoor action cameras (Insta360 X3/X4/One R/Ace Pro, GoPro series) and smart cycling/running accessories employ Wake-on-BLE (WoBLE) architectures to maximize battery life during long activities.

  1. When these devices go to sleep:
  2. They completely power down their primary SoCs and cease all connectable BLE peripheral advertising.
  3. An auxiliary low-power BLE radio operates as a passive scanner listening for a specific broadcast advertisement (e.g., GAP Local Name + 27-byte Manufacturer Specific Data payload).

Detecting this broadcast triggers a hardware interrupt to the PMIC, waking the camera so it can begin advertising standard GATT services.

Because Garmin Connect IQ currently has no mechanism to transmit advertising packets, Garmin remotes cannot wake dormant action cameras. Athletes are forced to either leave their cameras powered on for the duration of a multi-hour ride/run (severely draining camera batteries) or take their hands off the handlebars to manually press physical power buttons.

Proposed API:

Add a safe, constrained broadcast function to `Toybox.BluetoothLowEnergy`:

    module BluetoothLowEnergy {
        //! Broadcasts a non-connectable BLE advertisement packet for a limited duration.
        //! @param options Dictionary containing:
        //!   :deviceName => Lang.String (optional GAP complete/short local name)
        //!   :manufacturerData => Lang.ByteArray (raw AD type 0xFF payload)
        //!   :durationMs => Lang.Number (max burst duration, e.g. 1000 - 5000ms)
        function broadcastAdvertisement(options as Lang.Dictionary) as Lang.Void;
    }

Safeguards for Watch Battery & Phone Connection:

To address system integrity, phone sync, and battery concerns:

  1. Non-connectable only: Does not require GATT server or connection management.
  2. Hard firmware timeout: Advertising automatically terminates after a short maximum duration (e.g., 3–5 seconds) to prevent battery depletion.
  3. Coexistence: Can leverage existing Nordic/chipset multi-role radio scheduling without interrupting Garmin Connect
  4. Permissions: Gated behind an explicit manifest permission (e.g., <iq:uses-permission id="BluetoothLowEnergyBroadcast"/>).