Other Parts Discussed in Thread: LAUNCHXL-CC26X2R1
在simple_peripheral例程中,如何调用打印输出功能和LED应用?谢谢!
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.
在simple_peripheral例程中,如何调用打印输出功能和LED应用?谢谢!
https://dev.ti.com/tirex/explore/node?node=ANqagjxZxWnBRB7bx0EnOw__pTTHBmu__LATEST 理頭不是建議你用Display_printf、為什麼你要直接用printf?
YiKai Chen您好!
我在simple_gatt_profile.h文件里添加了
#define SIMPLEPROFILE_CHAR6 5
#define SIMPLEPROFILE_CHAR6_UUID 0xFFF6
#define SIMPLEPROFILE_CHAR6_LEN 7
在simple_gatt_profile.c文件里添加了:
CONST uint8 simpleProfilechar6UUID[ATT_BT_UUID_SIZE] =
{
LO_UINT16(SIMPLEPROFILE_CHAR6_UUID), HI_UINT16(SIMPLEPROFILE_CHAR6_UUID)
};
static uint8 simpleProfileChar6Props = GATT_PROP_READ;
static uint8 simpleProfileChar6[SIMPLEPROFILE_CHAR6_LEN] = { 0, 0, 0, 0, 0 };
static uint8 simpleProfileChar6UserDesp[17] = "Characteristic 6";
static gattAttribute_t simpleProfileAttrTbl[SERVAPP_NUM_ATTR_SUPPORTED] =//添加
{ ATT_BT_UUID_SIZE, characterUUID },
GATT_PERMIT_READ,
0,
&simpleProfileChar6Props
},
{
{ ATT_BT_UUID_SIZE, simpleProfilechar6UUID },
GATT_PERMIT_AUTHEN_READ,
0,
simpleProfileChar6
},
{
{ ATT_BT_UUID_SIZE, charUserDescUUID },
GATT_PERMIT_READ,
0,
simpleProfileChar6UserDesp
},
simpleProfile_ReadAttrCB//添加
case SIMPLEPROFILE_CHAR6_UUID:
*pLen = SIMPLEPROFILE_CHAR6_LEN;
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
break;
simpleProfile_WriteAttrCB//添加
case SIMPLEPROFILE_CHAR6_UUID:
if ( offset == 0 )
{
if ( len != SIMPLEPROFILE_CHAR6_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
if ( status == SUCCESS )
{
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
notifyApp = SIMPLEPROFILE_CHAR6;
}
break;
在simple_peripheral.c
static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)//添加
case SIMPLEPROFILE_CHAR6:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6,&buf);
if (osal_memcmp(buf,"LED_ONN",SIMPLEPROFILE_CHAR6_LEN))
{
}
if (osal_memcmp(buf,"LED_OFF",SIMPLEPROFILE_CHAR6_LEN))
{
}
break;
想通过CHAR6的数据实现红外线发射,不知道这种方法对不对呢?谢谢!
YiKai Chen您好!
我定义了:
static uint8 simpleProfileChar6Props = GATT_PROP_READ | GATT_PROP_WRITE;
在函数:
static void SimplePeripheral_processCharValueChangeEvt(uint8_t paramId)
添加了:uint8_t buf[7];
case SIMPLEPROFILE_CHAR6:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR6,&buf);
if (osal_memcmp(buf,"LED_ONN",SIMPLEPROFILE_CHAR6_LEN))
{
Display_printf(dispHandle, 0, 0, "LED_ONN");
}
if (osal_memcmp(buf,"LED_OFF",SIMPLEPROFILE_CHAR6_LEN))
{
Display_printf(dispHandle, 0, 0,"LED_OFF");
}
break;
测试时,第一个特性值可以实现读写,第六个操作失败,截图如下:

用Read Using Characteristic UUID读取第六个属性值提示:认证不足。

用Discover Characteristic by UUID可以读取

写入失败

我在上面的操作中,哪个步骤操作错误?还是代码有问题呢
YiKai Chen您好!
我在simpleProfile_ReadAttrCB添加了以下代码:
case SIMPLEPROFILE_CHAR6_UUID:
*pLen = SIMPLEPROFILE_CHAR6_LEN;
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
break;
在simpleProfile_WriteAttrCB添加了以下代码:
case SIMPLEPROFILE_CHAR6_UUID:
if ( offset == 0 )
{
if ( len != SIMPLEPROFILE_CHAR6_LEN )
{
status = ATT_ERR_INVALID_VALUE_SIZE;
}
}
else
{
status = ATT_ERR_ATTR_NOT_LONG;
}
if ( status == SUCCESS )
{
VOID memcpy( pValue, pAttr->pValue, SIMPLEPROFILE_CHAR6_LEN );
notifyApp = SIMPLEPROFILE_CHAR6;
}
break;
是不是这个思路不对,正确的做法因该是怎么实现呢?
你試試看用我附上的bim_offchip_CC26X2R1_LAUNCHXL_nortos_ccs.hex/project_zero_CC26X2R1_LAUNCHXL_tirtos_ccs.hex烧录到你的LAUNCHXL-CC26X2R1看看會不會動作