Part Number:CC2340R5
請問我透過nRF APP的藍芽功能從FFF1寫入值,我要如何在我寫完之後Notify結果回來到nRF APP上面
是否有範例程式可以參考?
Dongfu Lee:
需要将fff1这个特征设置成notify和write权限,basic_ble下有char4是有notify的,notify调用的是设置特征的函数,你可以看下。最重要的两个文件是simple_gatt_profile.c(在sdk的source/ti/bleapp/profile下)和app_simple_gatt.c(在sdk的example/rtos/LP_EM_CC2340R5/ble5stack/basic_ble/app/profile下),有个simpleGatt_notifyChar4函数。你可以通过CCS导入basic_ble例程修改即可。
,
Ryan:
simple_gatt_profile.c與app_simple_gatt.c有找到 如果我要把basic_ble裡的值Notify出去 像是這樣嗎?但是這感覺只有設定,好像沒有Notify出去想問有沒有更詳細的設定? 感謝!
,
Dongfu Lee:
notify是设置特征值的,读取app发送的数据是获取特征值。basic_ble是收到char3的特征值就通过char4 notify出去,只有1个字节。你需要修改特征的配置,将特征设置成写和notify权限,特征值是数组的形式。
,
Dongfu Lee:
你需要在simple_gatt_profile最前面修改下char的权限和特征值,还有特征表也需要改,然后在set和get参数函数也需要修改。
,
Ryan:
意思是notify主要是用來查看APP發送的數據是否有收到嗎? 並不是用來回傳CC2340的變數或陣列等等
,
Dongfu Lee:
不是的,是ti的basic_ble例程是这么做,你可以修改的,将if条件去掉。
,
Ryan:
那麼他notify數據 是用SimpleGattProfile_getParameter 這個Function去 發送值給nRF APP嗎
,
Dongfu Lee:
不是,是simpleGattprofile_SetParameter。
,
Ryan:
了解 我直接在simpleGattprofile_SetParameter的Char4上修改 帶入我自己宣告的值 但是呼叫SimpleGatt_notifyChar4()後,在nRF上只有notify一個Byte是我要的 後面全部是0,我想他應該是哪裡有限制到notify的長度,但是我找不到他在那裡限制,想問notify要如何解除限制長度
,
Galaxy Yue:
在BLE通信中,notify的最大长度由BLE Stack版本和MTU共同决定的,最大长度应该有251字节,
解除限制的话可以考虑修改MTU
,
Ryan:
那能夠自動notify嗎? 我發現simpleGattprofile_SetParameter並不能達到我的需求,這個Function還是得在nRF去read才會有值有找到一個GATT_Notification 不知道這個是否能夠自動notify? 如果是有什麼範例Code嗎?
,
Dongfu Lee:
你这个是在setparameter里面限制了长度,里面应该参考char5使用memcpy,还有,你修改了char4的特征值成数组了么。
,
Ryan:
我似乎找到原因了,readAttrCB那邊只存了一個Byte,所以才只有一個Byte被Notify。
但是我發現這不符合我的預期,我想要讓CC2340可以在我Write指令進去,讀取到值之後,可以自動notify出來所以我在SimpleGattProfile_writeAttrCB得到Value之後呼叫GATT_Notification(),但呼叫之後會跑進去iCall_abort()的while裡 不知是否有其他解決方法
,
Ryan:
有成功了 感謝你!
,
Galaxy Yue:
感谢Dongfu的解答
,
Galaxy Yue:
感谢Dongfu的解答