Thread 中讨论的其他器件: BLE-STACK
工具/软件:TI C/C++编译器
您好!
我只是在将 BLE-CC2650与 NRF Connect 应用程序连接后尝试同时读取_CHARCTERSTIC_2 (通知类型)和 WRITE_CHARACTERSTIC_5。 在我们的应用程序中、我们将从一个控制器发送和接收数据到 ble (CC2650)、然后再发送到 app、反之亦然。 但是、我们已经通过 CRO 进行了检查、BLE Rx 引脚正在从控制器获取数据。
我面临的问题:
使用 UART_Write()函数调用后、UART_ReadCallback 不会出现。
//UART 配置代码片段
空 UART_Configuration ()
{
uint16_t n;
/*UART 初始化*/
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readMode = UART_MODE_CALLACK;
uartParams.writeMode = UART_MODE_BLOCKING;
//uartParams.readReturnMode = UART_RETURN_FULL;
uartParams.readCallback =&UART_readCallBack;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
hUART = UART_open (Board_UART、uartParams);
N = UART_READ (hUART、recv_buf、1);
}
/*UART 读取回调代码片段*/
void UART_readCallBack (UART_Handle handle、void *ptr、size_t size)
{
uint8_t n;
if (buf_index >= BLEBUFSIZE)
{
buf_index = 0;
}
if (recv_buf[0]!='\0')
{
UART_buf[buf_index++]= recv_buf[0];
memcpy (SendData、UART_buf、BLEBUFSIZE);
}
N = UART_READ (hUART、recv_buf、1);
如果(n!= 0)
{
UART_readCancel (hUART);
UART_READ (hUART、recv_buf、1);
}
}
在 CCS 中进行调试后、我知道我能够读取通知/指示、然后如果我尝试写入任何5个特性、那么当我们当时尝试读取特征2的指示/通知 UART 读取中断时、我能够写入之后的特性 我不知道我做什么错了。
// GATTPROFILE.c 代码片段
静态 bStatus_t simpleProfile_WriteAttrCB (uint16_t connHandle、gattAttribute_t * pAttr、uint8_t * pValue、uint16_t len、uint16_t offset、uint8_t 方法)
{
bStatus_t status =成功;
字符 I = 0;
//如果属性权限要求写入授权,则返回错误
if ( gattPermitAuthorWrite( pAttr->权限))
{
//授权不足
返回(ATT_ERR_INFLOAD_Author);
}
if (pAttr->type.len == ATT_BT_UUID_SIZE)
{
// 16位 UUID
uint16 uuid = build_uint16 (pAttr->type.uuuuid[0]、pAttr->type.uuuid[1]);
交换机(uuid)
{
/*问题 SIMPLEPROFILE_CHAR2_UUID:
如果(status == Success)
{
void memcpy( pAttr->pValue、pValue、20 );
(* simpleProfileCB)(SIMPLEPROFILE_CHAR2);
}
中断;*/
案例 GATT_CLIENT_CHAR_CFG_UUID:
状态= GATTServApp_ProcessCCCWriteReq (connHandle、pAttr、pValue、len、
offset、GATT_CLIENT_CFG_Indicate);
if (status == Success)(如果(状态==成功))
{
uint16 value = build_uint16 (pValue[0]、pValue[1]);
(* simpleProfileCB)((值=GATT_CFG_NO_OPERATION)? SIMPLEPROFILE_CHAR6:DATA_TRANSITE);
}
中断;
/*问题 SIMPLEPROFILE_CHAR3_UUID:
如果(status == Success)
{
void memcpy( pAttr->pValue、pValue、5 );
(* simpleProfileCB)(SIMPLEPROFILE_CHAR3);
}
中断;
Case SIMPLEPROFILE_CHAR4_UUID:
如果(status == Success)
{
void memcpy( pAttr->pValue、pValue、5 );
(* simpleProfileCB)(SIMPLEPROFILE_CHAR4);
}
中断;
*
Case SIMPLEPROFILE_CHAR5_UUID:
如果(status == Success)
{
// void memcpy (pAttr->pValue、pValue、MAX_DATA_LEN);
for (i=0;((i < 50)&&(pValue[i]!='$');i++)
{
pAttr->pValue[i]= pValue[i];
}
pAttr->pValue[i]='$';
ConfigLen = I+1;
IndicationFlag = 2;
(* simpleProfileCB)(SIMPLEPROFILE_CHAR5);
}
中断;
默认值:
//不应该来这里!
状态= ATT_ERR_ATTR_NOT _找到;
中断;
}
}
其他
{
// 128位 UUID
状态= ATT_ERR_INVALID_Handle;
}
返回(状态);
}
谢谢
Vidushi
