3 Replies Latest reply on Jan 19, 2018 7:36 AM by epr_1639216

    Changing an advertisement data.

      How can I change an advertisement packet...

      I followed this tutorial...

      PSoC-4-BLE/100_Projects_in_100_Days/Day009_Dynamic_Broadcaster at master · cypresssemiconductorco/PSoC-4-BLE · GitHub

       

      and made my own version for my application.. I'm currently debugging it.

      I set my Service Data to 0.

      I need it to switch it from 0 to 1, and vice versa.

       

       

      CYBLE_GAPP_DISC_MODE_INFO_T discoveryReport;

       

      int main(void)

      {

          CYBLE_API_RESULT_T apiResult;

          CyGlobalIntEnable; /* Enable global interrupts. */

       

       

          apiResult = CyBle_Start(StackEventHandler);

          /* Place your initialization/startup code here (e.g. MyInst_Start()) */

       

       

          for(;;)

          {

              CyBle_ProcessEvents();

              DynamicADVPayloadUpdate();

          }

      }

       

      void DynamicADVPayloadUpdate(void)

      {

          if(CyBle_GetBleSsState() == CYBLE_BLESS_STATE_EVENT_CLOSE)

          {

              discoveryReport.advData->advData[14u] = 0x01;

              CyBle_GapUpdateAdvData(discoveryReport.advData, discoveryReport.scanRspData);

          }

      }

       

      void StackEventHandler(uint32 event, void *eventParam)

      {

          switch(event)

          {

              /* Mandatory events to be handled by Find Me Target design */

              case CYBLE_EVT_STACK_ON:

              case CYBLE_EVT_GAP_DEVICE_DISCONNECTED:

                  /* Start BLE advertisement for 30 seconds and update link

                   * status on LEDs */

                  CyBle_GappStartAdvertisement(CYBLE_ADVERTISING_FAST);

       

       

                break;

       

       

              case CYBLE_EVT_GAPP_ADVERTISEMENT_START_STOP:

                  if(CyBle_GetState() == CYBLE_STATE_DISCONNECTED)

                  {

                      CyBle_GappStartAdvertisement(CYBLE_ADVERTISING_FAST);

                  }

                  break;

       

       

              default:

              break;

          }

      }

       

      Message was edited by: Cyrus Nikko Pante

        • 1. Re: Changing an advertisement data.

          It looks like you are doing it correctly. The only difference you would need would be to account for changing the value between 0x01 and 0x00 for your requirements

          • 2. Re: Changing an advertisement data.

            It is not working though... Learned that I need to

            make this happen CyBle_GetBleSsState() == CYBLE_BLESS_STATE_EVENT_CLOSE

            But how do I get to that State?

            I saw that it needs to be hibernated or in sleep mode?

            Also after that, can I connect to that device(set into a Peripheral) to my Central?

            • 3. Re: Changing an advertisement data.

              CYBLE_BLESS_STATE_EVENT_CLOSE is an event state that occurs when the advertising radio is temporarily "off", meaning that there is no active wireless transmission at that time (iirc), which should occur automatically on its own when you are advertising. It is not related to deep sleep or hibernate.

              Anytime the unit is advertising, it means that the radio is ready and will accept a connection from your central device if requested (barring the addition of security and other software checking.)