2 Replies Latest reply on Aug 10, 2015 11:01 AM by kwang

    BCM20732 send a 16 bytes length notifycation

      Dear All,


      I have a problem.How to send a 16 bytes notification?


      now,my code only can send a 4-bytes notification.

      Is there any error with my code?


      My code and GATT definition are as below:


      #define OEM_HANDLE_SERV_BATT_MONITOR                        0x0500

      #define OEM_UUID_SERV_BATT_MONITOR                          0x2B, 0x6B, 0xFA, 0xD1, 0x7C, 0x30, 0x2D, 0x94, 0x62, 0x4C, 0x84, 0x38, 0xCE, 0xB7, 0x87, 0x00

      // 0087B7CE-3884-4C62-942D-307CD1FA6B2B



      #define OEM_HANDLE_CHAR_BATT_MONITOR                        0x0501

      #define OEM_HANDLE_VALUE_BATT_MONITOR                       0x0502

      #define OEM_UUID_CHAR_SERV_BATT_MONITOR                    0x03, 0xD8, 0xD7, 0x92, 0x4E, 0x58, 0xF1, 0x87, 0x56, 0x4C, 0x28, 0x35, 0x7A, 0xC4, 0xF9, 0x4B

      // 4BF9C47A-3528-4C56-87F1-584E92D7D803



      //Battery Monitor Service


          // Characteristic: battery monitoring






        0x00, 0x00, 0x00,0x00, 0x00, 0x00,0x00, 0x00,



      if (bleprofile_ReadHandle (OEM_HANDLE_VALUE_BATT_MONITOR, &db_pdu) == 0)


                  //ble_trace0("read batt handle is true \n");

                  // save to GATT DB for sync with GATT read request



                    db_pdu.pdu[i] = ec_report[i];






                   if(bleprofile_WriteHandle (OEM_HANDLE_VALUE_BATT_MONITOR, &db_pdu)==0)

                   ble_trace1("read batt handle is true %x\n",db_pdu.pdu [0]);




                  bleprofile_sendNotification (OEM_HANDLE_VALUE_BATT_MONITOR,db_pdu.pdu, db_pdu.len);




        • 1. Re: BCM20732 send a 16 bytes length notifycation

          The biggest problem I see is that your GATT database is sized to 8 bytes. This is the final digit of the vendor-specific characteristic. But this doesn't explain why you can't write past 4 bytes.


          A couple things to note. Be sure that your handles are all incrementing. They are in this example, but make sure that they increment with respect to the rest of your GATT database as well.


          Assuming you're using LightBlue or a similar app, try forgetting the device in your phone's settings. This can solve strange behavior having to do with the GATT database.


          Finally, try executing your notify loop in the easiest way possible:


          void notify_function (void) {

               BLEPROFILE_DB_PDU db_pdu;


               bleprofile_ReadHandle(OEM_HANDLE_VALUE_BATT_MONITOR, &db_pdu);


                for(i=0; i<16; i++){

                    db_pdu.pdu[i] = ec_report[i];



               bleprofile_WriteHandle(OEM_HANDLE_VALUE_BATT_MONITOR, &db_pdu);

               bleprofile_sendNotification(OEM_HANDLE_VALUE_BATT_MONITOR, (UINT8 *)db_pdu.pdu, db_pdu.len);



          If the code above doesn't work, the problem likely lies in your GATT database. Refer to How to Write WICED Smart Applications for further reading on the GATT DB.