SYD881X读取GATT VALUE的长度
现在具体遇到这样一个需要,机器生产后要更新profile,这个只能够通过升级4K来做,但是需要知道profile是否改变了,这个就要知道profile是否改变来决定是否要升级,这里的做法是增加一个函数:
extern uint8_t GattValueGetHdlLen(uint16_t hdl);
比如我要知道handle为0x001F对应的数据的长度是否改变了,只要这样调用函数就好了:
int main(void)
{
uint8_t value_len;
__disable_irq();
ble_init(); //蓝牙初始化,系统主时钟初始化64M,32K时钟初始化为LPO
value_len=GattValueGetHdlLen(BLE_UART_NOTIFY_VALUE_HANDLE);//这个函数必须要在协议栈初始化之后调用
nvic_priority(); //把串口优先级设置到最高
********************
dbg_printf("Syd8811_UART %s:%s %d\r\n",__DATE__ ,__TIME__,value_len);
代码运行后显示log如下:
这里删除两个字节后把TXT下载到芯片后,复位代码运行显示的长度如下:
这里显示的是26,但是实际的长度只有18,另外的8个是一些固定的头部!
到此说明可以读回长度了,注意这个功能只有在syd8811_ble_lib20240620_105101.lib这个版本才有这个函数
本文涉及到的代码和profile请从如下地址下载:https://download.csdn.net/download/chengdong1314/89459878
**后话:**傻了,只是想着客户的需求,没有想过其实可以在Verdor datas里面保存4K的版本号,这样就不用通过读取GATT这些如此复杂的方式来做判断是否要升级了.但是想过接口已经做了,为了对得起自己逝去的时间还是把这篇文章写出来!