5个职位/ 0个新
最后发表
z20121202038
离线
最后看到:4年2周以前
加入:2016-03-30 51
关于数据传输的可靠性问题

你好,
咨询一下,在数据传输的过程中如何保证对端设备收到了我们发送的数据。会不会存在丢包的情况,如果存在,对于丢包情况是怎么处理的,丢了就丢了?如果有警报信息需要传送,丢包应该是不能接受的吧……
谢谢!

设备:
snowdream1
离线
最后看到:8个月,3个星期前
工作人员
加入:14章25条的2014-08-17
如果应用这层,只能通过gattc_cmp_evt

如果应用这层,只能通过gattc_cmp_evt_handler函数来处理返回的消息,看接收的情况。
蓝牙芯片的底层,按照数据进入的先后顺序,保证远端一定要收到才发送下一个。通过(SN /公布序号来控制)。如果超过链路监管时间,蓝牙连接就断了。

z20121202038
离线
最后看到:4年2周以前
加入:2016-03-30 51
你好,

你好,
1)是不是说蓝牙芯片的底层是有报文缓冲区的,应用程序层启动数据发送后,报文是进入缓冲区的,然后按照报文进入的先后顺序进行发送吗?
2)如果底层的报文缓冲区满了,该如何处理呢,先进入缓冲区的先删除?
3)如果在连接断开的情况下,我能不能继续往底层报文发送缓冲区写数据,一旦连接建立,自动按进入的先后顺序发送?缓冲区的大小可控制吗?
4)蓝牙传输本身是可靠传输?那么,底层的保证机制是SN /公布序号,意思是不是:每发一个包,只有对端设备回了包,才会发下一个包吗?对应到应用程序层,通过gattc_cmp_evt_handler函数来处理返回的消息,但是它应该是没办法区分是哪个报文发送成功的返回消息的吧?
Static int gattc_cmp_evt_handler(ke_msg_id_t const msgid, struct gattc_cmp_evt const *param,
Ke_task_id_t const dest_id, Ke_task_id_t const src_id)

开关(param - > req_type)

案例GATTC_NOTIFY:

//发送确认到APP,该值被发送/没有
htpt_temp_send_cfm_send (param - >状态,HTPT_THERM_TEMP_SEND);

打破;

案例GATTC_INDICATE:

//发送确认到APP,该值被发送/没有
htpt_temp_send_cfm_send (param - >状态,HTPT_CENTRAL_IND_CFM);

打破;
默认值:休息;

返回(KE_MSG_CONSUMED);

谢谢!

Jelphi
离线
最后看到:7个月6天前
工作人员
加入:2015-09-10 12:07
蓝牙底层保证了数据传输的可靠性,有相应的重传机制

蓝牙底层保证了数据传输的可靠性,有相应的重传机制,如果超出规定的时间,连接就会断开,上面应用层做相应的处理

snowdream1
离线
最后看到:8个月,3个星期前
工作人员
加入:14章25条的2014-08-17
1 .一般发往远端设备的报文处理流程如下:应用程序- > GAPC

1 .一般发往远端设备的报文处理流程如下:应用程序- > GAPC - > GATTC - > L2CAP层。其中L2CAP层会按照你的报文大小进行分配空间,如果空间不够,直接断言。另外,如果远端设备因为链路超时,也会发送断开连接的指令。此时第一步即应用程序- > GAPC这一层就走不通,因为没有连接,报文直接丢弃。
2 .报文满了,就直接断言了,蓝牙连接会断
3.蓝牙连接断开了,是发不了的。你只能控制应用程序层的缓冲区,可以参考需求方的工程
4.对,没办法区分。这个只能应用程序层做数据索引了。