在pxp reporter DA14681中以一种特性发送大约20个字节

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
2个员额/0个新员额
最后一篇文章
马哈梅德106
离线
最后一次见到:2个月3周前
加入:2019-05-03 17:28
在pxp reporter DA14681中以一种特性发送大约20个字节

嗨,对话

我正在基于DA14681的定制板上工作,我正在使用pxp reporter作为基础项目,并通过使定制服务成为可报告的,通过可报告的方式发送数据。到目前为止,一切都很顺利。现在我想发送超过1个字节,例如,我想发送10或20个字节,但我不能这样做。

这是服务代码,但它适用于单字节数据传输。我如何修改它以发送20个字节,或者是否有任何示例代码可以在这方面帮助我。谢谢

类型定义结构{
ble_服务svc;

//处理
uint16_t templ_val_h;
uint16模板;
}MMTNU服务;

静态无效句柄读取请求(ble\U服务*svc、const ble\U evt\U gatts\U读取请求*evt)
{
mmtn_service_t*mmtn=(mmtn_service_t*)svc;

如果(evt->handle==mmtn->templ\u ccc\u h)
{
UINT16_T CCC = 0x0000;

ble_storage_get_u16(evt->conn_idx,mmtn->templ_ccc_h,&ccc);

//我们很少 - endian,好的,直接从uint16_t写
ble_gatts_read_cfm(evt->conn_idx,evt->handle,ATT_ERROR_OK,sizeof(ccc)和ccc);
}否则
{
内部温度等级=0;

/*默认警报级别-“无警报”*/
//pm_保持活力();
温度水平=获取热敏电阻温度(温度为0);//0->TH4

//测试温度计数器++;
ble_gatts_read_cfm(evt->conn_idx,evt->handle,ATT_ERROR_OK,sizeof(临时级别)和临时级别);
//pm_恢复睡眠();
}
}

ble_service_t*mmtn_init(常数ble_service_config_t*config,常数mm_tempsense_info_t*info)
{
uint16\u t num\u descr;
uint16_t num_attr;
uint16_t cpf_h=0;
mmtn\u服务*mmtn;
att_uuid_t uuid;
int8_t level=0;

mmtn=OS_MALLOC(sizeof(*mmtn));
memset(mmtn,0,sizeof(*mmtn));

mmtn->svc.connected\u evt=手柄\u connected\u evt;
mmtn->svc.read\u req=handle\u read\u req;
mmtn->svc.write_req=handle_write_req;

//如果设置为“info”,则内容呈现格式描述符
num_descr=(信息?2 : 1);
num\u attr=ble\u service\u get\u num\u attr(配置,1,num\u descr);

可从字符串(uuid\u MMTN和&uuid)读取uuid\u;
ble\u gatts\u add\u service(&uuid,GATT\u service\u PRIMARY,num\u attr);

ble_服务_配置_添加_包括(配置);

来自字符串(uuid MMTN温度级别和uuid)的数据;
表格gatts添加特性(&uuid,GATT属性读取,GATT属性通知,
ble_服务_配置_提升_perm(附件perm读取,配置),
1、0、NULL和mmtn->temp\u val\u h);

ble_uuid_create16(uuid_GATT_客户端_字符_配置,&uuid);
ble\u gatts\u add\u描述符(&uuid、ATT\u PERM\u RW、1、0和mmtn->temp\u ccc\u h);

如果(信息){
ble_uuid_create16(uuid_GATT_CHAR_PRESENTATION_FORMAT,&uuid);
ble_gatts_添加_描述符(&uuid),
ble_服务_配置_提升_perm(附件perm读取,配置),
7、0和cpf_h);
}

ble_gatts_register_service(&mmtn->svc.start_h,&mmtn->temp_val_h,&mmtn->temp_ccc_h,&cpf_h,0);

/*设置电池电量的初始值,以便我们始终设置适当的特征值*/
ble_gatts_set_值(mmtn->模板值,大小)(

ble_service_t*mmtn_init(常数ble_service_config_t*config,常数mm_tempsense_info_t*info)
{
uint16\u t num\u descr;
uint16_t num_attr;
uint16_t cpf_h=0;
mmtn\u服务*mmtn;
att_uuid_t uuid;
int8_t level=0;

mmtn=OS_MALLOC(sizeof(*mmtn));
memset(mmtn,0,sizeof(*mmtn));

mmtn->svc.connected\u evt=手柄\u connected\u evt;
mmtn->svc.read\u req=handle\u read\u req;
mmtn->svc.write_req=handle_write_req;

//如果设置为“info”,则内容呈现格式描述符
num_descr=(信息?2 : 1);
num\u attr=ble\u service\u get\u num\u attr(配置,1,num\u descr);

可从字符串(uuid\u MMTN和&uuid)读取uuid\u;
ble\u gatts\u add\u service(&uuid,GATT\u service\u PRIMARY,num\u attr);

ble_服务_配置_添加_包括(配置);

来自字符串(uuid MMTN温度级别和uuid)的数据;
表格gatts添加特性(&uuid,GATT属性读取,GATT属性通知,
ble_服务_配置_提升_perm(附件perm读取,配置),
1、0、NULL和mmtn->temp\u val\u h);

ble_uuid_create16(uuid_GATT_客户端_字符_配置,&uuid);
ble\u gatts\u add\u描述符(&uuid、ATT\u PERM\u RW、1、0和mmtn->temp\u ccc\u h);

如果(信息){
ble_uuid_create16(uuid_GATT_CHAR_PRESENTATION_FORMAT,&uuid);
ble_gatts_添加_描述符(&uuid),
ble_服务_配置_提升_perm(附件perm读取,配置),
7、0和cpf_h);
}

ble_gatts_register_service(&mmtn->svc.start_h,&mmtn->temp_val_h,&mmtn->temp_ccc_h,&cpf_h,0);

/*设置电池电量的初始值,以便我们始终设置适当的特征值*/
ble_gatts_set_值(mmtn->temp_val_h,sizeof(临时级别)和临时级别);

如果(信息){
uint8_t cpf_val[7];
uint8_t*p=cpf值;

put_u8_inc(&p,0x04);//格式=无符号8位整数
put_u8_inc(&p,0x00);//指数=0
put_16_inc(&p,0x27AD);//单位=百分比
put_u8_inc(&p,info->namespace);
put_u16_inc(&p,信息 - >描述符);

//内容表示格式描述符具有静态值
b)设定值(cpf_h、sizeof(cpf_val)、cpf_val);
}

mmtn->svc.end\u h=mmtn->svc.start\u h+num\u attr;

返回&mmtn->svc;
}

)阵列);

如果(信息){
uint8_t cpf_val[7];
uint8_t*p=cpf值;

put_u8_inc(&p,0x04);//格式=无符号8位整数
put_u8_inc(&p,0x00);//指数=0
put_16_inc(&p,0x27AD);//单位=百分比
put_u8_inc(&p,info->namespace);
put_u16_inc(&p,信息 - >描述符);

//内容表示格式描述符具有静态值
b)设定值(cpf_h、sizeof(cpf_val)、cpf_val);
}

mmtn->svc.end\u h=mmtn->svc.start\u h+num\u attr;

返回&mmtn->svc;
}

静态无效通知级别(ble_服务*svc、uint16连接idx、int8级别)
{
mmtn_service_t*mmtn=(mmtn_service_t*)svc;
UINT16_T CCC = 0x0000;

ble_storage_get_16(连接idx、mmtn->templ_ccc_h和ccc);

如果((ccc和GATT(ccc通知){
返回;
}

ble_gatts_send_事件(连接idx、mmtn->temp_val_h、GATT_事件通知、sizeof(级别)和级别);
}

设备:
PM_对话框
离线
最后一次见到:2天14小时前
工作人员
加入:2018-02-08 11:03
你好,mahmed106,

你好,mahmed106,

谢谢你的意见。我看完了您提供的代码片段,发现特征值的最大长度为1字节。ble_gatts_add_characteristic()的max_len参数设置为1,这意味着最大长度为1字节。你能换一下吗?

谢谢,下午好