如何发送SENOR数据超过在BLE 20个字节

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
10个帖子/ 0新
最后一篇
vishnuatdialog
离线
最后一次露面:1年零3个星期前
加入:2017年7月25日07:44
如何发送SENOR数据超过在BLE 20个字节

你好对话框,
我们已经通过I2C将传感器连接到Da14585我们的原型板。我们的传感器的数据长度为60个字节,但BLE是广播只有20,我已与通用应用程序(BLE扫描仪)检查字节。我曾试图增加MTU大小(.max_mtu),DEF_SVC4_LSM_ACC_X_CHAR_LEN = 60,但没有受到影响,仍然只播放20个字节。

此前我们已经使用广播SDK 6.0.2上亲开发板DA14585 AB硅芯片和传感器接口板相同60个字节的传感器数据。现在,我们已经建立了一个原型,基于AC硅片,并与这一次它没有发生SDK 6.0.10工作。

请告诉我们,我需要做什么改变广播超过20字节的BLE?

谢谢
D.Vishnu

设备:
PM_Dialog
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨vishnuatdialog,

嗨vishnuatdialog,

至于我能理解你的查询,要实现的是数据长度扩展(DLE)功能。如果我误解了你的问题,请让我知道。如果你的意思是,你应该用正确的DLE包配置da1458x_config_advanced.h头文件的CFG_MAX_RX_PACKET_LENGTH和CFG_MAX_TX_PACKET_LENGTH定义。然后,你应该修改.max_txoctets和user_config.h头文件的user_gapm_conf结构的.max_txtime。此外,您应该使用的MTU大小.max_mtu = 60。另外,我强烈建议你为DA14585的SoC的应用DSPS。此应用程序使用的数据长度的延伸。请搜索USE_DLE哈希定义。

谢谢,PM_Dialog

vishnuatdialog
离线
最后一次露面:1年零3个星期前
加入:2017年7月25日07:44
你好PM_Dialog,

你好PM_Dialog,

我的DLE包是60个字节。

//我们的预期数据格式读出由BLE扫描器:{:0.02:-0.00:1.06:.4.83:0.91:1.05:25:100:}
//十六进制:Ox7B3A302E30323A2D302E30303A312E30363A2D342E38333A302E39313A312E30353A32353A3130303A7D000700000000400000004000000FF000000
//这个数据,我仍与DA14585DB上Pro开发板通过I2C(P0_2,P0_3引脚)与SDK 6.0.2和默认的界定及与传感器接口板integarated在无处不在的SDK中定义的所有变量DLE越来越为251。

我在我的代码更改以下(SDK 6.0.10)
CFG_MAX_RX_PACKET_LENGTH = 61 //默认为251
CFG_MAX_TX_PACKET_LENGTH默认= 61 //这是251
.max_txoctets=61 //默认为251
.max_txtime = 600默认//这是2120
.max_mtu = 60 //默认值为150

仍然,我的BLE广告数据没有变化,只发送20字节(在我们的原型板与SDK 6.0.10)
输出值;{:0.01:-O25:0.97:4。
十六进制:Ox7B3A302E30313A2D302E32353A302E39373A342E

我曾与DSPS代码也验证了,到处是默认最大值只有(251)。有没有自定义的值。

不过,如果任何修改需要在我的代码做请注明。

谢谢
D.Vishnu

PM_Dialog
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨vishnuatdialog,

嗨vishnuatdialog,

对不起,我不明白你想把你的数据存储到广告字符串。向用户发布数据的有效可用字节只有31字节中的28字节,因为为设置标志数据保留了3字节。由于这是与规范相关的限制,您将无法在广告包中容纳超过28字节的数据。虽然,当您使用智能手机作为扫描仪时,您可以接收超过31字节(最多62字节),但这是因为智能手机使用主动扫描,这意味着它将请求第二个PDU,每当它检测到来自外设的广告。这称为扫描请求,对该请求的响应(另外31个字节(28个可用,3个保留))被恰当地命名为扫描响应。因此,我建议您将数据存储到USER_ADVERTISE_DATA和USER_ADVERTISE_SCAN_RESPONSE_DATA定义的user_config.h头文件。

谢谢,PM_Dialog

vishnuatdialog
离线
最后一次露面:1年零3个星期前
加入:2017年7月25日07:44
你好PM_Dialog,

你好PM_Dialog,
我尝试用这种方式在两个变量中存储数据
/ / /广告数据
#定义USER_ADVERTISE_DATA( “\ X03” \
ADV_TYPE_COMPLETE_LIST_16BIT_SERVICE_IDS \
ADV_UUID_DEVICE_INFORMATION_SERVICE \
\ \ x11
ADV_TYPE_COMPLETE_LIST_128BIT_SERVICE_IDS \
“\ x2F \ x2A \ x93 \ xA6 \ xBD \ xD8 \ x41 \ x52 \ xAC \ x0B以\ \ . xC6 \表示就是x10 \ x99 \ x2E xFE \ xED”)
///广告数据长度-最大28字节,预留3字节设置
的#define USER_ADVERTISE_DATA_LEN(的sizeof(USER_ADVERTISE_DATA)-1)

///扫描响应数据
#定义USER_ADVERTISE_SCAN_RESPONSE_DATA( “\ X03” \
ADV_TYPE_COMPLETE_LIST_16BIT_SERVICE_IDS \
ADV_UUID_DEVICE_INFORMATION_SERVICE \
\ \ x11
ADV_TYPE_COMPLETE_LIST_128BIT_SERVICE_IDS \
“\ x2F \ x2A \ x93 \ xA6 \ xBD \ xD8 \ x41 \ x52 \ xAC \ x0B以\ \ . xC6 \表示就是x10 \ x99 \ x2E xFE \ xED”)

///扫描响应数据长度 - 最大31个字节
的#define USER_ADVERTISE_SCAN_RESPONSE_DATA_LEN(的sizeof(USER_ADVERTISE_SCAN_RESPONSE_DATA)-1)

尽管如此,BLE是广告只有20个字节。

我不知道,因为我已经定义正确way.please澄清。

谢谢
D.Vishnu

PM_Dialog
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨vishnuatdialog,

嗨vishnuatdialog,

我从我的身边相同的代码,你已经发布测试,我能够同时获得了广告,并在BLE扫描仪移动应用程序扫描应答数据。您扫描的响应数据是否正确定义。你能描述你是如何想测试呢?另外,请你澄清你想完成什么?你想将传感器数据存储到广告串?难道我没有理解错?

谢谢,PM_Dialog

vishnuatdialog
离线
最后一次露面:1年零3个星期前
加入:2017年7月25日07:44
你好PM_Dialog,

你好PM_Dialog,
有一次,我的原型连接到BLE扫描仪应用程序,我们会写“01”的数据控制点,在那之后,我们会点击按钮通知,我的传感器数据将在每一秒进行更新。

正如我告诉你之前,我已经看到我的传感器数据,60个字节上BLE扫描仪应用程序的单一特性的更新,当我们与DA14585开发板(AB硅)+传感器接口板与SDK 6.0.2工作。

之后,我们进行了传感器和DA14585芯片的原型设计。由于之前的SDK版本不支持新的AC硅芯片,我们将代码更新到SDK 6.0.10。现在BLE在每个特征上只发送20字节的数据。

AS在预知版本(SDK 6.0.2),我们没有改变我们的MTU大小,CFG_MAX_RX_PACKET_LENGTH我们没有把任何数据USER_ADVERTISE_SCAN_RESPONSE_DATA变量。为SDK定义我们仍然得到了60个字节,BLE扫描仪应用传感器数据和我们与外部网关读取相同的数据(BLE客户端)的所有预定义值。

但是,在新的SDK中,我们面临的问题是在原型板上,我们的BLE scanner app中的传感器数据只有20字节。我们尝试了很多方法,但是无法增加我们的传感器数据长度。

我不知道,我已经把我的广告串数据,我们已经创造了user_cust1_impl.c回调计时器,一旦我们写控制点定时器将启动,并点击后,通知我们的传感器数据在BLE扫描器每秒自动更新过的应用程序。计时器内部,我们已经定义sprintf函数将转换我们的传感器数据作为像这样的BLE扫描仪应用程序可见{:0.02:-0.00:1.06:.4.83:0.91:1.05:25:100:}。数据格式表示如下我们的传感器数据{斧:AY:AZ:GX:GY:GZ:TC:蝙蝠,}。

但是,现在我们可以像{:0.02:-0.00:1.06:.4,这样只读取前20个字节。为了增加传感器数据长度,我们需要在代码中更改哪些地方?
正如你在我的前一篇文章中看到的,我试图改变DLE, DEF_SVC4_LSM_ACC_X_CHAR_LEN, USER_ADVERTISE_SCAN_RESPONSE_DATA变量,什么都没有得到解决。

请告诉我,如果我缺少在我的代码什么?

谢谢
D.Vishnu

PM_Dialog
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨vishnuatdialog,

嗨vishnuatdialog,

道歉,但我误会了以前的帖子,因为你提到的“广告数据”,我以为是你的意思是广告的字符串。你可以请尝试写长长的特征值实现,如在SDK的ble_app_peripheral例子的实施?请看看SDK的这个例子。如果要被写入的特性值的长度大于20个字节,则user_svc1_long_val_att_info_req_handler()在user_catch_rest_hndl()函数将被触发。如果长度小于20字节的user_svc1_long_val_wr_ind_handler()将被执行。所以,如果你想在不MTU交换发送超过20个字节,你应该做相同的实现作为ble_app_peripheral例子的user_svc1_long_val_att_info_req_handler()函数。能否请您试试这个执行,让我知道?

谢谢,PM_Dialog

vishnuatdialog
离线
最后一次露面:1年零3个星期前
加入:2017年7月25日07:44
你好PM_Dialog,

你好PM_Dialog,

至于你提到我已在ble_app_peripheral例如看到user_svc1_long_val_att_info_req_handler。它被定义为这样。

Void user_svc1_rest_att_info_req_handler(ke_msg_id_t const msgid,
Struct custs1_att_info_req const *param,
ke_task_id_t常量DEST_ID,
ke_task_id_t常量src_id)
{
struct custs1_att_info_rsp *rsp = KE_MSG_ALLOC(custs1_att_info_rsp,
src_id,
dest_id,
custs1_att_info_rsp);
//提供连接索引。
rsp-> conidx = app_env [param-> conidx] .conidx;
//提供属性索引。
负责- - - - - - > att_idx =参数- > att_idx;
//部队当前长度为零。
rsp->长度= 0;
//提供的ATT错误代码。
rsp->状态= ATT_ERR_WRITE_NOT_PERMITTED;

ke_msg_send(RSP);
}
另外,在上述功能,就没有这样其可以req->值。如果req->值是存在的则只有每当user_catch_rest_hndl被称为我可以通过我的传感器数据在缓冲格式。

与user_svc1_long_val_wr_ind_handler中一样,我们可以通过调用计时器以通知格式传递传感器数据。
空隙user_svc1_long_val_wr_ind_handler(ke_msg_id_t常量MSGID,
结构custs1_val_write_ind常量* PARAM,
ke_task_id_t常量DEST_ID,
ke_task_id_t常量src_id)
{
uint8_t VAL = 0;
的memcpy(&缬氨酸,&param->值[0],param->长度);
如果(VAL!= CUSTS1_CP_LSM_ACCX_DISABLE)
{
lsm_acc_x_used = app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY,app_lsmaccX_timer_cb_handler);
}
别的
{
如果(lsm_acc_x_used!= 0xFFFF的)
{
app_easy_timer_cancel (lsm_acc_x_used);
lsm_acc_x_used = 0xFFFF的;
}
}
}
上述功能将调用app_lsmaccX_timer_cb_handler计时器,当我们写01到charactreristic:
空白app_lsmaccX_timer_cb_handler ()
{
char buff1 [60];
的sprintf(BUFF1, “{:GES0090001:%2F:%2F:%2F:%2F:%d:}”,readFloatAccelX(),readFloatAccelY(),
readFloatAccelZ(),readTempC(),battery_get_lvl(BATT_CR1225));

结构custs1_val_ntf_ind_req * REQ = KE_MSG_ALLOC_DYN(CUSTS1_VAL_NTF_REQ,
prf_get_task_from_id (TASK_ID_CUSTS1),
TASK_APP,
custs1_val_ntf_ind_req,
DEF_SVC1_LONG_VALUE_CHAR_LEN);

req->手柄= SVC1_IDX_LONG_VALUE_VAL;
申请- >长度= DEF_SVC1_LONG_VALUE_CHAR_LEN;
申请- >通知= true;
的memcpy(req->值,&BUFF1,DEF_SVC1_LONG_VALUE_CHAR_LEN);存储在BUFF1和DEF_SVC1_LONG_VALUE_CHAR_LEN = 60 //这里我的传感器数据

ke_msg_send(要求的);
if (ke_state_get(TASK_APP) == APP_CONNECTED)
{
lsm_acc_x_used = app_easy_timer(APP_PERIPHERAL_CTRL_TIMER_DELAY,app_lsmaccX_timer_cb_handler);

}
}

对不起,我没有得到我怎样才能提高我应该具备的品质长度,这样我可以通过我的传感器数据user_svc1_long_val_att_info_req_handler()函数,也是我应该如何实现这个应用端(在BLE扫描仪)。

由于所有其他处理都会有写,并通知请求,可以在特性来实现性能,那么我们就可以利用BLE扫描仪,以可行的给他们打电话。

请帮我在这,怎么能chnage的user_svc1_long_val_att_info_req_handler()函数,我可以通过BLE送我的完整60个字节的传感器数据。

谢谢
D.Vishnu

PM_Dialog
离线
最后一次露面:2天5小时前
职员
加入:2018-02-08 11:03
嗨vishnuatdialog,

嗨vishnuatdialog,

请尝试,以确保您在通知发出60个字节,主能够得到这些60个字节后续程序到初始项目。请更改user_config.h头文件到60 user_gapm_conf结构的max_mtu项目在做这件事后,尝试通过通知发送60bytes并尝试使用嗅探器,以检查60个字节发送在空中或不。如果你看到60个字节可以发送,这意味着主机不能接收60个字节。关于通知,字节的量,一个设备可以发送过的特性的通知是由MTU(最大传输单元)的限制,默认情况下MTU在23个字节包括ATT层开销受到限制,所以通知的有效载荷是20个字节。通过在你的情况下增加MTU尺寸意味着你可以发送更多的字节过一个通知,所以最大传输单元应该是字节,你想送+ 3个额外的字节量。请试试这个到您最初的项目,让我知道。

谢谢,PM_Dialog