5 Replies Latest reply on May 15, 2019 11:11 PM by GaneshD_41

    Strange value from GATT ERROR CODE

    EyGe_3183606

      Hello,

       

      We print constantly the Gatt error code to UART for debugging purposes.

      Recently we encountered a case where the value was 2000171b (it was printed multiple times among other properly printed strings).

      Given that the Gatt error code is of type CYBLE_GATT_ERR_CODE_T which has a maximum value of 0xFF, we were wondering how this could be and what does it mean?

       

      Thanks,
      David

        • 1. Re: Strange value from GATT ERROR CODE
          PY_21

          Hello David,

           

          Can you please share your project ?

           

          Thanks,

          P Yugandhar.

          • 2. Re: Strange value from GATT ERROR CODE
            EyGe_3183606

            Hi,

             

            Sorry for my late reply.

            Unfortunately, I cannot share my project due to company policy.

            But I can share with you the functions that are related to this incident (I used three dots "..." to indicate code sections that are not relevant:

             

            // Call back event function to handle various events from BLE stack

            void BLE_ProcessEvents(uint32 event, void * eventParam)

            {

                 ...

                 CYBLE_GATT_ERR_CODE_T gattErr;

                 ...

                 if(CYBLE_DEVICE_SERVICE_DEVICE_STATUS_CHAR_HANDLE == wrReqParam->handleValPair.attrHandle)

                 {

                                  iprintf("BLE Write: DEVICE_STATUS\n\r");

                                  ...

                                  gattErr = CyBle_GattsWriteAttributeValue(&wrReqParam->handleValPair, ZERO, &cyBle_connHandle,                     CYBLE_GATT_DB_PEER_INITIATED);

             

                 }

             

                 ...

             

                 if(gattErr != CYBLE_GATT_ERR_NONE)

                 {

                      iprintf("Gatt Error code : %x \n\r", gattErr);    // Added for debugging

                 }

            }

             

            void iprintf(char8 *pszFmt,...)

            {

                uint8 *pszVal;

                uint32 iVal, xVal, i = 0, buffer[12], index = 1;

                uint8 cVal;

                uint32 *pArg;

                pArg =(uint32 *)&pszFmt;

             

             

                while(*pszFmt)

                {

                    if('%' != *pszFmt)

                    {

                        iputc(*pszFmt);

                        pszFmt++;

                        continue;

                    }

                    pszFmt++;

             

             

                    if(*pszFmt == 's')

                    {

                        pszVal = (uint8*)pArg[index++];

                        for(; *pszVal != '\0'; pszVal++)

                            iputc(*pszVal);

                        pszFmt++;

                        continue;

                    }

                    if(*pszFmt == 'd')

                    {

                        iVal = pArg[index++];

                        i = 0;

                        do{

                            buffer[i++] = iVal % 10;

                            iVal /= 10;

                        }while(iVal);

                        while(i > 0)

                        {

                            i--;

                            iputc(*change(buffer[i]));

                        }

                        pszFmt++;

                        continue;

                    }

                    if(*pszFmt == 'c')

                    {

                        cVal = (uint8)pArg[index++];

                        iputc(cVal);

                        pszFmt++;

                        continue;

                    }

                    if(*pszFmt == 'x')

                    {

                        xVal = pArg[index++];

                        i = 0;

                        do{

                            buffer[i++] = xVal % 16;

                            xVal /= 16;

                        }while(xVal);

                        if(i%2!=0)

                            buffer[i++]=0;

                        if(i<2)

                            buffer[i++]=0;

             

             

                        while(i > 0)

                        {

                            i--;

                            iputc(*change(buffer[i]));

                        }

                        pszFmt++;

                        continue;

                    }

                    if(pszFmt == '\0')

                    {

                        break;

                    }

             

             

                }

            }

            • 3. Re: Strange value from GATT ERROR CODE
              GaneshD_41

              Hi,

               

              This looks strange. Please typecast the enum variable in the print statement and check once.

               

              iprintf("Gatt Error code : %x \n\r", (int)gattErr);

               

              Thanks

              Ganesh

              • 4. Re: Strange value from GATT ERROR CODE
                EyGe_3183606

                It would seem that to typecast this would not be relevant since in any case the value provided by PSOC is not greater than 0xFF.

                Wouldn't you agree?

                • 5. Re: Strange value from GATT ERROR CODE
                  GaneshD_41

                  Hi

                   

                  You are correct. The value of this enum variable could not be more than 255. But I am not able to reproduce the issue at my side.

                   

                  Please try adding this piece of code in your project and check once. Please do not forget to include <stdio.h> in your main.c .

                   

                  int _write(int file, char *ptr, int len)

                  {

                      int i;

                      file = file;

                      for (i = 0; i < len; i++)

                      {

                        UART_UartPutChar(*ptr++);

                      }

                      return len;

                  }

                   

                  If you are still getting the issue after the above changes, please try to send a demo project that reproduces the behavior for us to test at our side.

                   

                  Thanks

                  Ganesh