嗨,对话
我正在基于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(级别)和级别);
}
你好,mahmed106,
谢谢你的意见。我看完了您提供的代码片段,发现特征值的最大长度为1字节。ble_gatts_add_characteristic()的max_len参数设置为1,这意味着最大长度为1字节。你能换一下吗?
谢谢,下午好