LightBlue 是进入什么函数来设置characteristic的值呢?
时间:10-02
整理:3721RD
点击:
使用LightBlue读写一个characteristic时,RTOS会调用什么函数来处理?在使用SimpleBLEPeripheral这个工程文件改写,在simpleGATTProfile.c这个文件的
bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )
函数的开头部分添加以下语句(头文件已添加,能编译通过):
if(*((uint8*)value) == 0xff)
{
PINCC26XX_setOutputValue(Board_LED1, 0);
PINCC26XX_setOutputValue(Board_LED2, 0);
PINCC26XX_setOutputValue(Board_LED3, 0);
PINCC26XX_setOutputValue(Board_LED4, 0);
}
else if(*((uint8*)value) == 0xee)
{
PINCC26XX_setOutputValue(Board_LED1, 1);
PINCC26XX_setOutputValue(Board_LED2, 1);
PINCC26XX_setOutputValue(Board_LED3, 1);
PINCC26XX_setOutputValue(Board_LED4, 1);
}
判断设置的参数是否为0xff或者0xee,分别用4个LED的亮和灭来表示。但是在手机的LightBlue软件中,重新设置参数,却没有LED的闪烁,调试的时候,在这个函数加入断点,也没有进入。
问题是:如果在手机端(Client)设置参数,不是进入bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )这个函数中进行,那么是进入到了什么函数来设置characteristic的值呢?
bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )
函数的开头部分添加以下语句(头文件已添加,能编译通过):
if(*((uint8*)value) == 0xff)
{
PINCC26XX_setOutputValue(Board_LED1, 0);
PINCC26XX_setOutputValue(Board_LED2, 0);
PINCC26XX_setOutputValue(Board_LED3, 0);
PINCC26XX_setOutputValue(Board_LED4, 0);
}
else if(*((uint8*)value) == 0xee)
{
PINCC26XX_setOutputValue(Board_LED1, 1);
PINCC26XX_setOutputValue(Board_LED2, 1);
PINCC26XX_setOutputValue(Board_LED3, 1);
PINCC26XX_setOutputValue(Board_LED4, 1);
}
判断设置的参数是否为0xff或者0xee,分别用4个LED的亮和灭来表示。但是在手机的LightBlue软件中,重新设置参数,却没有LED的闪烁,调试的时候,在这个函数加入断点,也没有进入。
问题是:如果在手机端(Client)设置参数,不是进入bStatus_t SimpleProfile_SetParameter( uint8 param, uint8 len, void *value )这个函数中进行,那么是进入到了什么函数来设置characteristic的值呢?
SetParameter接口可以理解成是给2640的APP部分调用的读写接口
static bStatus_t simpleProfile_WriteAttrCB(uint16_t connHandle,
gattAttribute_t *pAttr,
uint8_t *pValue, uint16_t len,
uint16_t offset, uint8_t method)这个函数是协议栈调用的接口
现在你是用手机读写2640的数值 所以任何数值的改变都是手机从蓝牙传输到2640 通过蓝牙协议栈传到APP层的
所以读写调用的应该是
simpleProfile_ReadAttrCB和simpleProfile_WriteAttrCB