This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于GATT服务中发送Notification和Indication的问题

芯片:CC2652

工程:ProjectZero

过程:修改了projectzero里面的dataservice.c,打开了以送Notification,并把DataService_SetParameter函数放到了按键处理函数中,期待每次按键能够触发发送Notification,但是没有效果T_T

问题:打开了Notification后,当DataService_SetParameter被调用时,是否projectzero会主动发送当前参数值到连接的BTool上?

我看到打印的log显示connhandle是fffff,而与BTool的connhandle是0,所以此处是否有问题?

  • 请问能否给出具体代码?
  • static void buttonDebounceSwiFxn(UArg buttonId)
    {
    

    uint8_t tempString_r[]="Button released.",tempString_p[]="Button pressed.";

    
      switch(buttonId)
      {
        case Board_PIN_BUTTON0:
        // If button is now released (buttonPinVal is active low, so release is 1)
        // and button state was pressed (buttonstate is active high so press is 1)
        if(buttonPinVal && button0State)
        {
          // Button was released
          buttonMsg.state = button0State = 0;
          sendMsg = TRUE;
          DataService_SetParameter(DS_STREAM_ID, sizeof(tempString_r), tempString_r);
          Log_info0("Board_PIN_BUTTON0_r\r\n");
        }
        else if(!buttonPinVal && !button0State)
        {
          // Button was pressed
          buttonMsg.state = button0State = 1;
          sendMsg = TRUE;
          DataService_SetParameter(DS_STREAM_ID, sizeof(tempString_p), tempString_p);
          Log_info0("Board_PIN_BUTTON0_p\r\n");
        }
        break;
      ...
      }
    }

    其中红色加粗部分是我添加上去的

    ProjectZero与BTool连接后,直接按按键0,BTool端显示的数据没有变化,然后利用BTool修改CCCD为notification及indication,再按键,projectzero就死机了T_T

    BTool的修改见上图

    求大神解答.

    1.我想利用notification向BTool同步本地数据这样可行吗?这种方式是由projectzero主动发起更新数据请求吗?

    2.上述工程哪里不对啊,为什么会出现按键后未更新以及修改stream CCCD配置后按键死机的情况呢?

  • 大神,前几天弄别的去了,我现在又回来纠结这个问题了!求回复!求解答!
  • mark

    @susan,遇到了同样的问题,我的setparameters函数是在sensor controller的CBs中直接调用的。

    不过现象与zz的一样,主机端打开notify之后,从机死机。

    进一步测试后发现,即使是操作同一个characteristic value,如果不打开notify,setparameters函数都可以正常写入。

    打开notify后,死机发生在setparameters内层调用GATT_Notification()时,可以顺利判断notify状态,但执行GATT_Notification()时死机,没有任何返回值。

    另外,尝试过在CBs中创建定时启动的event,触发后再执行同样的Setparameter函数。这种情况下,就没再发生死机的情况,notify功能也正常。

    请帮忙分析看看,感谢!