你好,对话框,
我们连接了传感器通过I2C Da14585在我们的模型板。我们的传感器数据长度为60个字节,但bie是广播只有20个字节,我检查了通用的应用程序(BLE扫描仪)。我试图增加MTU大小(.max_mtu) DEF_SVC4_LSM_ACC_X_CHAR_LEN = 60但是仍然没有影响广播20字节。
之前我们有播放相同的60个字节传感器数据使用SDK 6.0.2有利于发展的董事会和DA14585 AB硅片和传感器突破董事会。现在我们开发了一个原型,基于AC硅片和使用SDK 6.0.10这次是不会发生。
请告诉我们什么改变我需要做广播超过20个字节祝福吗?
谢谢你!
D.Vishnu
设备:
嗨vishnuatdialog,
我能够理解您的查询,您希望实现数据长度扩展(DLE)特性。如果我误解了你的问题,请让我知道。你的意思是,你应该配置CFG_MAX_RX_PACKET_LENGTH和CFG_MAX_TX_PACKET_LENGTH da1458x_config_advanced的定义。使用正确的DLE h头文件包。那么你应该修改.max_txoctets的.max_txtime user_gapm_conf user_config的结构。h头文件。另外,您应该使用MTU大小.max_mtu = 60。同时,我强烈建议你DA14585 SoC的dsp应用程序。这个应用程序使用的数据长度的扩展。请搜索USE_DLE散列定义。
谢谢,PM_Dialog
你好PM_Dialog,
我DLE包60个字节。
/ /我们的预期数据格式读取BLE扫描仪:{:0.02:-0.00:1.06:.4.83:0.91:1.05:25:100:}
/ /十六进制:Ox7B3A302E30323A2D302E30303A312E30363A2D342E38333A302E39313A312E30353A32353A3130303A7D000700000000400000004000000FF000000
/ /这个数据我还获得与职业发展DA14585DB董事会integarated传感器突破董事会通过I2C (P0_2, P0_3别针)SDK 6.0.2和默认定义为所有定义的变量在到处了SDK是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
仍然没有改变在我的祝福广告数据发送只有20个字节(在我们的原型板SDK 6.0.10)
输出值;{:0.01:-O25:0.97:4。
十六进制:Ox7B3A302E30313A2D302E32353A302E39373A342E
我有了dsp代码也,到处都是默认最大值(251)。没有定义的自定义值。
不过,如果任何修改需要做在我的代码请提及。
谢谢你!
D.Vishnu
嗨vishnuatdialog,
对不起但我不明白你想要存储数据到广告字符串。广告的有效可用的字节数据,用户只有28字节的31个字节3字节设置标志数据保留。因为这是规范相关限制,您将无法适应超过28字节的数据在广告包。尽管如此,当你使用智能手机作为扫描仪能够接收超过31个字节(最高可达62个字节),但这是因为智能手机使用主动扫描这意味着它将请求第二个PDU当它检测到一个广告从外设。这就是所谓的扫描请求和响应这个请求,另一个31个字节(28可供使用和3保留),是一个扫描响应适当命名的。所以,我建议你将数据存储到USER_ADVERTISE_DATA和user_config USER_ADVERTISE_SCAN_RESPONSE_DATA定义。h头文件。
谢谢,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个字节设置保留
#定义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个字节
#定义USER_ADVERTISE_SCAN_RESPONSE_DATA_LEN (sizeof (USER_ADVERTISE_SCAN_RESPONSE_DATA) 1)
不过,bie是广告只有20个字节。
我不知道我已经定义了正确的方法。请澄清。
谢谢你!
D.Vishnu
嗨vishnuatdialog,
我从我这边测试相同的代码发布,和我能得到广告和BLE扫描仪的扫描响应数据的移动应用程序。你扫描响应数据正确定义。你能描述你想测试它吗?另外,请澄清你想完成什么?你想将传感器数据存储到广告字符串?我理解正确吗?
谢谢,PM_Dialog
你好PM_Dialog,
一旦我把原型BLE扫描仪应用程序,我们将编写“01”数据控制点,在那之后,我们将点击通知按钮,每秒钟我的传感器数据将被更新。
正如我之前告诉过你,我已经看到传感器数据60个字节在单一特征更新BLE扫描仪应用程序,当我们正在与DA14585开发板(AB硅)+传感器突破板与SDK 6.0.2中。
之后,我们已经为原型设计了传感器和DA14585芯片。以前的SDK版本不支持新的AC硅片,SDK 6.0.10我们更新代码。现在祝福发送只有20字节的数据在每一个特征。
在预知版本(SDK 6.0.2),我们没有改变我们的MTU大小、CFG_MAX_RX_PACKET_LENGTH和我们没有把任何数据在USER_ADVERTISE_SCAN_RESPONSE_DATA变量。所有预定义的值作为SDK定义仍在祝福我们有60个字节的传感器数据扫描仪应用程序,我们读过相同的数据与外部网关(BLE客户机)。
但是,新的SDK,我们面临的问题模型板,我们的传感器数据只有20字节BLE扫描仪应用程序。我们试了很多方法,但不能增加我们的传感器数据长度。
我不确定,我已经把我的广告数据字符串,我们创建了一个回调在user_cust1_impl计时器。c一旦我们写信给控制点计时器将开始后,点击自动通知我们的传感器数据在每秒钟所祝福扫描仪应用。在计时器,我们定义了sprintf函数会将我们的传感器数据转换成可见BLE扫描仪应用程序就像这样{:0.02:-0.00:1.06:.4.83:0.91:1.05:25:100:}。代表我们的传感器数据的数据格式如下{ax: ay: az: gx: gy:广州:Tc:蝙蝠,}。
但是,现在我们只能够阅读前20个字节就像这样{:0.02:-0.00:1.06:。4。这个传感器数据长度增加,我们需要改变我们的代码吗?
如你所见我在以前的文章试图改变DLE DEF_SVC4_LSM_ACC_X_CHAR_LEN USER_ADVERTISE_SCAN_RESPONSE_DATA变量没有了。
请告诉我如果我丢失在我的代码吗?
谢谢你!
D.Vishnu
嗨vishnuatdialog,
道歉,但我误解了以前的文章,因为你提到“广告数据”,我以为你意味着广告字符串。你能试着写长特征值实现,实现的ble_app_peripheral SDK的例子吗?请看看这个SDK的例子。如果要写特征值的长度大于20个字节,那么user_svc1_long_val_att_info_req_handler user_catch_rest_hndl()的()函数将被触发。如果长度小于20字节user_svc1_long_val_wr_ind_handler()将被执行。因此,如果您想要发送超过20个字节没有MTU的交流,你应该做相同的实现如user_svc1_long_val_att_info_req_handler ble_app_peripheral()函数的例子。请试试这个实现,让我知道吗?
谢谢,PM_Dialog
你好PM_Dialog,
当你提到我看过user_svc1_long_val_att_info_req_handler ble_app_peripheral例子。这是定义为这种方式。
空白user_svc1_rest_att_info_req_handler (ke_msg_id_t const是否,
struct custs1_att_info_req const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
struct custs1_att_info_rsp *负责= KE_MSG_ALLOC (custs1_att_info_rsp
src_id,
dest_id,
custs1_att_info_rsp);
/ /提供索引的连接。
负责- > conidx = app_env [param - > conidx] .conidx;
/ /提供属性的索引。
负责- > att_idx =参数- > att_idx;
/ /力当前长度为零。
负责长度- > = 0;
/ /提供附上的错误代码。
负责- >状态= ATT_ERR_WRITE_NOT_PERMITTED;
ke_msg_send(负责);
}
在上面的函数中,并没有因此可以申请- >价值。如果申请- >值然后只有我可以通过传感器数据缓冲区格式每当user_catch_rest_hndl叫做。
如user_svc1_long_val_wr_ind_handler通知的格式我们可以通过传感器数据通过调用计时器。
空白user_svc1_long_val_wr_ind_handler (ke_msg_id_t const是否,
struct custs1_val_write_ind const *参数,
ke_task_id_t const dest_id,
ke_task_id_t const src_id)
{
uint8_t val = 0;
memcpy (val,参数[0]- >值,参数- >长度);
如果(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 ! = 0 xffff)
{
app_easy_timer_cancel (lsm_acc_x_used);
lsm_acc_x_used = 0 xffff;
}
}
}
上面的函数将调用app_lsmaccX_timer_cb_handler计时器,当我们写charactreristic 01:
空白app_lsmaccX_timer_cb_handler ()
{
char buff1 [60];
sprintf (buff1,“{: GES0090001: % .2f: % .2f: % .2f: % .2f: % d:}”, readFloatAccelX (), readFloatAccelY (),
readTempC readFloatAccelZ (), (), battery_get_lvl (BATT_CR1225));
struct custs1_val_ntf_ind_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);
申请- >处理= SVC1_IDX_LONG_VALUE_VAL;
申请- >长度= DEF_SVC1_LONG_VALUE_CHAR_LEN;
申请- >通知= true;
memcpy(请求- >值、&buff1 DEF_SVC1_LONG_VALUE_CHAR_LEN);/ /在这里我的传感器数据存储在buff1 DEF_SVC1_LONG_VALUE_CHAR_LEN = 60
ke_msg_send(要求的);
如果(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扫描仪)。
和其他处理程序将写信通知请求,可以实现为属性特征,然后使用祝福我们可以称之为扫描仪可行。
请帮助我,如何可以chnage user_svc1_long_val_att_info_req_handler()函数可以发送我完整的60个字节传感器数据通过祝福。
谢谢你!
D.Vishnu
嗨vishnuatdialog,
请试下程序到最初的项目,以确保你60个字节发送通知和主能够得到这些60个字节。请改变max_mtu user_config user_gapm_conf结构。到60 h头文件。这样做之后,试图通过通知发送的60个字节并尝试使用一个嗅探器为了检查60个字节是发送在空气或不是。如果你看到,60个字节可以发送,这意味着主不能接收60个字节。有关通知,一个设备可以发送的字节数量超过通知的一个特征是有限的MTU(最大传输单元),默认MTU有限在23个字节包括ATT层开销,所以通知的有效载荷是20个字节。通过增加MTU大小,意味着您可以派遣更多的字节在一个通知,所以在你的情况下,最大传输单元应该是您想要发送的字节数量+ 3额外字节。请试试这个初始项目,让我知道。
谢谢,PM_Dialog