dialog da14585 co_error分析

/**
 ****************************************************************************************
 *
 * @file co_error.h
 *
 * @brief List of codes for error in RW Software.
 *
 * Copyright (C) RivieraWaves 2009-2014
 *
 *
 ****************************************************************************************
 */

#ifndef CO_ERROR_H_
#define CO_ERROR_H_

/**
 ****************************************************************************************
 * @addtogroup CO_ERROR Error Codes
 * @ingroup COMMON
 * @brief Defines error codes in messages.
 *
 * @{
 ****************************************************************************************
 */

/*
 * DEFINES
 ****************************************************************************************
 */

/*****************************************************
 ***              ERROR CODES                      ***
 *****************************************************/

#define CO_ERROR_NO_ERROR                        0x00
#define CO_ERROR_UNKNOWN_HCI_COMMAND             0x01
#define CO_ERROR_UNKNOWN_CONNECTION_ID           0x02
#define CO_ERROR_HARDWARE_FAILURE                0x03
#define CO_ERROR_PAGE_TIMEOUT                    0x04
#define CO_ERROR_AUTH_FAILURE                    0x05
#define CO_ERROR_PIN_MISSING                     0x06
#define CO_ERROR_MEMORY_CAPA_EXCEED              0x07
#define CO_ERROR_CON_TIMEOUT                     0x08  
#define CO_ERROR_CON_LIMIT_EXCEED                0x09
#define CO_ERROR_SYNC_CON_LIMIT_DEV_EXCEED       0x0A
#define CO_ERROR_ACL_CON_EXISTS                  0x0B
#define CO_ERROR_COMMAND_DISALLOWED              0x0C
#define CO_ERROR_CONN_REJ_LIMITED_RESOURCES      0x0D
#define CO_ERROR_CONN_REJ_SECURITY_REASONS       0x0E
#define CO_ERROR_CONN_REJ_UNACCEPTABLE_BDADDR    0x0F
#define CO_ERROR_CONN_ACCEPT_TIMEOUT_EXCEED      0x10
#define CO_ERROR_UNSUPPORTED                     0x11
#define CO_ERROR_INVALID_HCI_PARAM               0x12
#define CO_ERROR_REMOTE_USER_TERM_CON            0x13//
#define CO_ERROR_REMOTE_DEV_TERM_LOW_RESOURCES   0x14
#define CO_ERROR_REMOTE_DEV_POWER_OFF            0x15
#define CO_ERROR_CON_TERM_BY_LOCAL_HOST          0x16//
#define CO_ERROR_REPEATED_ATTEMPTS               0x17
#define CO_ERROR_PAIRING_NOT_ALLOWED             0x18
#define CO_ERROR_UNKNOWN_LMP_PDU                 0x19
#define CO_ERROR_UNSUPPORTED_REMOTE_FEATURE      0x1A
#define CO_ERROR_SCO_OFFSET_REJECTED             0x1B
#define CO_ERROR_SCO_INTERVAL_REJECTED           0x1C
#define CO_ERROR_SCO_AIR_MODE_REJECTED           0x1D
#define CO_ERROR_INVALID_LMP_PARAM               0x1E
#define CO_ERROR_UNSPECIFIED_ERROR               0x1F///
#define CO_ERROR_UNSUPPORTED_LMP_PARAM_VALUE     0x20
#define CO_ERROR_ROLE_CHANGE_NOT_ALLOWED         0x21
#define CO_ERROR_LMP_RSP_TIMEOUT                 0x22
#define CO_ERROR_LMP_COLLISION                   0x23
#define CO_ERROR_LMP_PDU_NOT_ALLOWED             0x24
#define CO_ERROR_ENC_MODE_NOT_ACCEPT             0x25
#define CO_ERROR_LINK_KEY_CANT_CHANGE            0x26
#define CO_ERROR_QOS_NOT_SUPPORTED               0x27
#define CO_ERROR_INSTANT_PASSED                  0x28 //
这个是connection update,或者 channel map update 的instant 比当前connection event counter小导致的。

应该是环境不好,或者射频新能不好,或者距离太远,导致这些命令包slave没有收到,然后Master一直重传到connection event counter超过instant值导致。
#define CO_ERROR_PAIRING_WITH_UNIT_KEY_NOT_SUP   0x29
#define CO_ERROR_DIFF_TRANSACTION_COLLISION      0x2A
#define CO_ERROR_QOS_UNACCEPTABLE_PARAM          0x2C
#define CO_ERROR_QOS_REJECTED                    0x2D
#define CO_ERROR_CHANNEL_CLASS_NOT_SUP           0x2E
#define CO_ERROR_INSUFFICIENT_SECURITY           0x2F
#define CO_ERROR_PARAM_OUT_OF_MAND_RANGE         0x30
#define CO_ERROR_ROLE_SWITCH_PEND                0x32 /* LM_ROLE_SWITCH_PENDING               */
#define CO_ERROR_RESERVED_SLOT_VIOLATION         0x34 /* LM_RESERVED_SLOT_VIOLATION           */
#define CO_ERROR_ROLE_SWITCH_FAIL                0x35 /* LM_ROLE_SWITCH_FAILED                */
#define CO_ERROR_EIR_TOO_LARGE                   0x36 /* LM_EXTENDED_INQUIRY_RESPONSE_TOO_LARGE */
#define CO_ERROR_SP_NOT_SUPPORTED_HOST           0x37
#define CO_ERROR_HOST_BUSY_PAIRING               0x38
#define CO_ERROR_CONTROLLER_BUSY                 0x3A
#define CO_ERROR_UNACCEPTABLE_CONN_INT           0x3B
#define CO_ERROR_DIRECT_ADV_TO                   0x3C
#define CO_ERROR_TERMINATED_MIC_FAILURE          0x3D
#define CO_ERROR_CONN_FAILED_TO_BE_EST           0x3E//如果中央设备(价签)发送连接请求,并且在前六个连接事件中没有          从外设返回任何响应,/则会发生此错误 (重启中央设备蓝牙可以解决(如手机蓝牙))

/* Proprietary error codes                                                              */
#define CO_ERROR_MASTER_KEY_SLAVE                0x80 /* MasterLink not allowed because slave */
#define CO_ERROR_CONNECTION_FILTERED             0x83 /* Connection Filtered by the HCI       */

#define CO_ERROR_UNDEFINED                       0xFF


/*****************************************************
 ***              HW ERROR CODES                   ***
 *****************************************************/

#define CO_ERROR_HW_UART_OUT_OF_SYNC            0x00
#define CO_ERROR_HW_MEM_ALLOC_FAIL              0x01


/// @} CO_ERROR

#endif // CO_ERROR_H_

错误代码

错误含义

错误代码

错误含义

0x01

位置HCI指令

0x14

由于另一端引起连接中断:资源限制

0x02

不能连接

0x15

由于另一端引起连接中断:关机

0x03

硬件故障

0x16

本机中断连接

0x04

寻呼超时

0x17

重复尝试

0x05

身份验证失败

0x18

不允许匹配

0x06

键丢失

0x19

未知LMP PDU

0x07

存储器已满

0x1A

不支持远端特性

0x08

连接超时

0x1B

拒绝SCO补偿

0x09

最大连接数

0x1C

拒绝SCO间歇模式

0x0A

连接到设备A的最大SCO连接数

0x1D

拒绝SCO无线模式

0x0B

ACL连接已存在

0x1E

非法链路管理参数

0x0C

指令非法

0x1F

未特别指明错误

0x0D

由于资源有限,主机被拒绝

0x20

不支持链路管理器协议参数

0x0E

由于安全原因,主机被拒绝

0x21

不允许角色改变

0x0F

由于远端设备单连接设备,主机拒绝

0x22

链路管理响应超时

0x10

主机超时

0x23

链路管理错误处理事务冲突

0x11

不支持特性或参数值

0x24

不允许LMP PDU

0x12

非法主机控制接口指令

0x25~0xFF

保留

0x13

由于另一端引起连接中断:用户中断连接

情况分析:
出现0x28 instant passed 立即通过
1)你好,
即时通过的错误代码表明,不能执行LMP PDU或LL PDU(例如LLXCONNECTIONUPDATEY Req PDU用于改变连接参数),因为该时刻已经发生。
因此,例如当主机发送这个PDU(LLyCalnFixUpDeaTeE.ReqPDU)时,它将作为这个PDU的一部分发送一个即时值。
当应用更新后的参数时,LLSCONNECTION-UpDATEYRE PDU的瞬时字段将被用来指示CONNEN计数,这被称为“即时”。主人应该允许至少6个连接事件,奴隶将在瞬间发生之前监听。
希望以上清除错误信息。
现在解决这个问题——
在BLE连接建立之后,你是否正在改变连接参数?如果是,检查从潜伏期数你用的是什么。尝试较少数量的从属延迟(例如0)。

  • & gt;是你在设计中采用低功耗模式,也改变了世界海关组织的睡眠时钟的准确性?如果是,请参阅12页#正确配置文件-http://www.cypress.com/file/140991/download
    你使用的是哪个BLE设备?如果你正在使用一个模块解决方案(cyble- xxxxxxx -xx)的一部分,为生态正确盖调整值按下面的文件-生态电容值ez-ble修剪™模块- kba218990
    -吉安

以上来自于百度翻译

 以下为原文

Hello,

The Instant Passed error code indicates that an LMP PDU or LL PDU ( for example LL_CONNECTION_UPDATE_REQ PDU for changing the connection parameter ) that includes an instant cannot be performed because the instant when this would have occurred has passed.
So, for example when the master sends this PDU (LL_CONNECTION_UPDATE_REQ PDU), it will sends an instant value as a part of this PDU.
The Instant field of the LL_CONNECTION_UPDATE_REQ PDU shall be used to indicate the connEventCount when the updated parameters shall be applied; this is known as the instant. The master should allow a minimum of 6 connection events that the slave will be listening for before the instant occurs.

Hope above clears about the error message.

Now to resolve this issue –

-> Are you changing the connection parameters after the BLE connection has established ? If yes, check what is the Slave latency number you have used. Try with a lesser number for slave latency (eg. 0)

-> Are you using the Low Power Modes in your design and also changing the WCO Sleep Clock Accuracy? If yes , please refer the page #12 for correct configuration from this document -http://www.cypress.com/file/140991/download

-> Which BLE device are you using ? If you are using a Module solution ( CYBLE-xxxxxxx-xx) part , assign the correct cap-trim values for the ECO as per the below document - ECO Capacitance Trim Values for EZ-BLE™ Modules - KBA218990

-Gyan

这个是connection update,或者 channel map update 的instant 比当前connection event counter小导致的。

应该是环境不好,或者射频新能不好,或者距离太远,导致这些命令包slave没有收到,然后Master一直重传到connection event counter超过instant值导致。

https://blog.csdn.net/zhoutaopower/article/details/95938674
2.1、LL_CHANNEL_MAP_IND
这个 LLCP 代表了咱们链接双方需要更新通信信道的 MAP 了(默认的,一共有 37 个 Channels),他的 CtrData 为:
包含了两个玩意:

ChM:5个字节,40 个 bits,代表了 40 个 channels,更新的时候,要用的信道写 1’b 不要的写 0’b;

Instant:代表在多少个 Event 的时候,大家一起更新这个 Channels;

Instant 这个参数,在很多的 LLCP 都有,在建立连接后,双方都统计一个变量,叫 Event Counter,代表当前经历了多少个 Connection Event(CE),由于空中的连接,具有不确定性,所以在更新的时候,并不是立马进行更新,而是协商好一个固定的时刻(以 Event Counter 来算),大家一起到那个时刻进行更新。比如,当前的 Event Counter 是 245,则发送这个 LLCP 的时候,可能填充的 Instant 就是 280,总之,是一个未来的时间点。(Core Spec 规定,这个 Instant 最小是未来的第 6 个 Event Counter,如果太小,在一个密集的时间内,如果出现了链路质量不好,很多重传,那么很可能在预期的时间点,对端还没有接收到包,等接收到了后,Event Counter 都错过了,导致双方有些参数不一样,所以如果出现这情况,收到过期的 LLCP 后,会上报 Instant Passed,直接断联)

好了,其他的 Control PDU 呢,在今后的交互分析中在仔细分析了,有兴趣的看官可以官网下载 Core Spec 先睹为快。
————————————————
版权声明:本文为CSDN博主「混子老腊肉」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhoutaopower/article/details/95938674

https://www.jianshu.com/p/2991155a81bb

LMP_switch_req PDU包含一个参数,即切换Instant,它指定执行TDD切换的时刻。这被指定为主设备的时钟的蓝牙时钟值,可供两个设备使用。此Instant由消息的发送者选择,并且至少应为将来2 * Tpoll 或32(以较大者为准)的时隙。切换Instant应在当前时钟值的12小时内,以避免时钟翻转。LMP_switch_req PDU 的发送方 选择切换Instant,并将LMP_switch_req PDU 排队 到LC进行传输,并启动在切换Instant到期的定时器。当定时器到期时,它启动模式切换。在主设备发起切换的情况下,如果 切换Instant到时还没有接收到 LMP_slot_offset PDU,则执行角色切换而不估计从机的时隙偏移。如果 在定时器到期之前接收到LMP_not_accepted PDU,则停止定时器并且不应启动角色切换。

当 接收 到LMP_switch_req时, 将切换Instant与当前主时钟值进行比较。如果它已经过去,那么该Instant已经过时,并且将 返回 具有错误代码Instant Passed(0x28) 的 LMP_not_accepted PDU。如果是将来,则 应该返回 LMP_accepted PDU,假设允许角色切换并且启动在切换Instant到期的定时器。当此定时器到期时,应启动角色切换。

成功切换角色后,监督超时和轮询间隔(Tpoll )应设置期间为其默认值。认证状态和ACO应保持不变。自适应跳频应遵循[Vol 2] B部分第8.6.5节中描述的过程。应使用max_slots 的默认值 。

作者:公子小水
链接:https://www.jianshu.com/p/2991155a81bb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发生在什么情况下:

2,有用的函数

/**


  • @brief Send a gap manager reset operation.
  • @return void

/
//TODO fly
__INLINE void app_gapm_reset_op(void)
{
struct gapm_reset_cmd
cmd = app_gapm_reset_msg_create();
app_gapm_reset_msg_send(cmd);
}

/**


  • @brief Send BLE disconnect command.
  • @param[in] conidx Connection Id
  • @return void

*/
void app_easy_gap_disconnect(uint8_t conidx);

//13次后出现
[15:03:19.249]收←◆I(EPL):write image head infor:
I(EPL):total:0x28a4
I(EPL):crc32:0x5c6f5913
I(EPL):width:0x280
I(EPL):height:0x180
@@add_show_job_task
@@ send def
user_sps_ble_send: len = 3
app_easy_gap_disconnect // 主动加的没用
@@Device disconnected reason:28

@@:wechat_data.

@@ wechat_data.consum_buffer_len :10415
@@ wechat_data.consum_pack_count :9
@@ wechat_data.image_len :10404
@@ wechat_data.iamge_crc32 :1550801171
@@ wechat_data.show_job :1
.user_on_set_dev_config_complete
user_on_db_init_complete
正常应该为
[15:02:16.772]收←◆I(EPL):write image head infor:
I(EPL):total:0x2840
I(EPL):crc32:0xe841d16e
I(EPL):width:0x280
I(EPL):height:0x180
@@add_show_job_task
@@ send def
user_sps_ble_send: len = 3
@@ user_send_ble_data:def,length:3

[15:02:17.059]收←◆other msgid 3601

[15:02:17.892]收←◆app_easy_gap_disconnect
@@Device disconnected reason:13

wechat_image_show_proc
time:0
crc32:0xe841d16e
index:0x0
image_show index:0x0 crc32:0xe841d16e

[15:02:19.428]收←◆SCREEN_READBUSY: cnt = 0

[15:02:25.507]收←◆screen_image_show!!!
SCREEN_READBUSY: cnt = 0

协议栈解析(转)

对开发者来说,很简单,他只需要调用send(0x53)
GATT层定义数据的类型和分组,方便起见,我们用0x0013表示电量这种数据类型,这样GATT层把数据打包成130053(小端模式!)
ATT层用来选择具体的通信命令,比如读/写/notify/indicate等,这里选择notify命令0x1B,这样数据包变成了:1B130053
L2CAP用来指定connection interval(连接间隔),比如每10ms同步一次(CI不体现在数据包中),同时指定逻辑通道编号0004(表示ATT命令),最后把ATT数据长度0x0004加在包头,这样数据就变为:040004001B130053
LL层要做的工作很多,首先LL层需要指定用哪个物理信道进行传输(物理信道不体现在数据包中),然后再给此连接分配一个Access address(0x50655DAB)以标识此连接只为设备A和设备B直连服务,然后加上LL header和payload length字段,LL header标识此packet为数据packet,而不是control packet等,payload length为整个L2CAP字段的长度,最后加上CRC24字段,以保证整个packet的数据完整性,所以数据包最后变成:
AAAB5D65501E08040004001B130053D550F6
AA – 前导帧(preamble)
0x50655DAB – 访问地址(access address)
1E – LL帧头字段(LL header)
08 – 有效数据包长度(payload length)
04000400 – ATT数据长度,以及L2CAP通道编号
1B – notify command
0x0013 – 电量数据handle
0x53 – 真正要发送的电量数据
0xF650D5 – CRC24值
虽然开发者只调用了 send(0x53),但由于低功耗蓝牙协议栈层层打包,最后空中实际传输的数据将变成下图所示的模样,这就既满足了低功耗蓝牙通信的需求,又让用户API变得简单,可谓一箭双雕!

常用ATT命令
蓝牙的request/response

    Client和Server之间是通过ATT PDU来通信的,ATT PDU主要包括4类:读,写,notify和indicate。如果一个命令需要response,那么会在相应命令后面加上request;如果一个命令只需要ACK而不需要response,那么它的后面就不会带request。这里要特别强调一点,BLE所有命令都是“必达”的,也就是说每个命令发出去之后,会立马等ACK信息,如果收到了ACK包,发起方认为命令完成;否则发起方会一直重传该命令直到超时导致BLE连接断开。换句话说,只要你的BLE没有断开,那么你之前发送的数据包,不管它是用什么ATT PDU来发送的,它肯定被对方收到了。我估计很多人对此会产生疑问,因为他们经常碰到丢包的情况,其实大家经常碰到的“丢包”,不是空中把包丢了或者包在空中被干扰了,而是大家发送的代码写得有问题,导致你要发送的包没有被安全送达到协议栈射频FIFO中,所以以后大家碰到丢包情况,请先检查你的代码,保证你的数据包正确完整安全地送达到协议栈射频FIFO中,只要数据包放到了协议栈射频FIFO中,蓝牙协议栈就能保证该数据包“必达”对方。既然每个ATT命令都必达对方,那么还需要request做什么?如果一个命令带有request后缀,那么发起方就可以收到命令的response包,这个response包在应用层是有回调事件的,而前述的ACK包在应用层是没有回调事件的。所以采用request/response方式,应用层可以按顺序地发送一些数据包,这个在很多应用场合是非常有用的。相反,如果你对应用层数据包的顺序没有要求,那么就可以不使用request/response形式。另外Request/response有一个副作用:大大降低通信的吞吐率,因为request/response必须在不同的连接间隔中出现,也就是说,你在间隔1中发送了一个request命令,那么response包必须在间隔2或者稍后间隔中回复,而不能在间隔1中回复,这就导致两个连接间隔最多只能发一个数据包,而不带request后缀的ATT命令就没有这个问题,在同一个连接间隔中,你可以同时发多个数据包,这样将大大提高数据的吞吐率。大家可以参考下图来理解request和非request命令的区别:

常用的带request的命令:所有read命令,write request,indication等,而常用的不带request的命令有write command,notification等,完整的ATT命令列表如下所示:

NRF_SDH_BLE_OBSERVER用来为本地文件(此处为main.c)注册一个BLE回调函数(此处为ble_evt_handler),NRF_SDH_BLE_OBSERVER这个宏执行成功后,所有的BLE事件都会被ble_evt_handler捕获。进入ble_evt_handler,你会发现BLE有上百个回调事件,你不需要每个都处理,你只需要处理你关心的事件即可,比如连接成功事件BLE_GAP_EVT_CONNECTED或者连接断开事件BLE_GAP_EVT_DISCONNECTED

NRF_SDH_BLE_OBSERVER有一个很大的好处:某个模块如果需要捕获BLE事件,那么它自己调用NRF_SDH_BLE_OBSERVER这个宏注册相应回调函数即可,而不再需要在其它文件中去注册这个回调函数,将模块的耦合性降到最低,符合模块化编程思想。(即response包在应用层的回调函数)

The Instant Passed error code indicates that an LMP PDU or LL PDU that
includes an instant cannot be performed because the instant when this would
have occurred has passed.

5.5 PROCEDURES WITH INSTANTS
Where a procedure involves a PDU with an Instant field, then the following
rules shall apply.
The Instant field shall be used to indicate the connEventCount when the
relevant change shall be applied; this is known as the instant for the procedure.
The master should allow a minimum of 6 connection events that the slave will
be listening for before the instant occurs, considering that the slave may only
be listening once every connSlaveLatency events.
When a slave receives such a PDU where (Instant – connEventCount) modulo
65536 is less than 32767 and Instant is not equal to connEventCount, the slave
shall listen to all the connection events until it has confirmation that the master
has received its acknowledgment of the PDU or connEventCount equals
Instant.
When a slave receives such a PDU where (Instant – connEventCount) modulo
65536 is greater than or equal to 32767 (because the instant is in the past), the
Link Layer of the slave shall consider the connection to be lost, shall exit the
Connection State and transition to the Standby State, and shall notify the Host
using the error code Instant Passed (0x28).
Note: The comparison of the connEventCount and the received Instant field is
performed using modulo 65536 math (only values from 0 to 65535 are
allowed), to handle the situation when the connEventCount field has wrapped

https://blog.csdn.net/mutoujian126/article/details/39001425?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242

eg:

user_idle_start: time = 151
user_idle_start: time = 161
b4:e6:01:fa:15:94 rssi = -61
epl_roll_batch
user_connect_start
SPSC ENABLE
epl_fsm_logon_even
find same
send::66
user_sps_ble_send: len = 66
user_on_connection:b4:e6:01:fa:15:94
Device connected
status:0
CLIENT ENABLED
SPSC Profile Enabled
TX SIZE (MTU CHANGED)/LVL 244 185
user_send_ble_data length:66

write_amount:244
size:244
write_amount:244
size:488
write_amount:244
size:732
write_amount:244
size:976
write_amount:244
size:1220
write_amount:216
size:1436
I(epl) type:1
send::34
user_sps_ble_send: len = 34
image_update_proc
I(EPL):img.total:0x2500
I(EPL):img.crc32:0x201ad243
I(EPL):img.offset:0x0
I(EPL):img.type:0x5
I(EPL):img.length:0x572
I(EPL):op_index:1873226917
send::47
user_sps_ble_send: len = 47
epl_image_reinit
1…
2…
\0\0\0
[08:49:07.904]收←◆b4:e6:01:fa:15:94 rssi = -60
epl_roll_batch
user_connect_start
SPSC ENABLE
epl_fsm_logon_even
find same
send::65
user_sps_ble_send: len = 65
user_on_connection:b4:e6:01:fa:15:94
Device connected
status:0
CLIENT ENABLED
SPSC Profile Enabled
TX SIZE (MTU CHANGED)/LVL 244 185
user_send_ble_data length:65

[08:49:08.320]收←◆write_amount:244
size:244
write_amount:244
size:488
write_amount:244
size:732
write_amount:244
size:976
write_amount:244
size:1220
write_amount:216
size:1436
I(epl) type:1
send::34
user_sps_ble_send: len = 34
image_update_proc
I(EPL):img.total:0x2500
I(EPL):img.crc32:0x201ad243
I(EPL):img.offset:0x0
I(EPL):img.type:0x5
I(EPL):img.length:0x572
I(EPL):op_index:715669847
send::46
user_sps_ble_send: len = 46
epl_image_reinit
1…
2…

[08:49:10.379]收←◆\0\0
[08:50:08.691]收←◆\0
[08:51:07.002]收←◆\0
[08:51:48.790]收←◆b4:e6:01:fa:15:94 rssi = -78
epl_roll_batch
user_connect_start
SPSC ENABLE
epl_fsm_logon_even
find same
send::65
user_sps_ble_send: len = 65
user_on_connection:b4:e6:01:fa:15:94
Device connected
status:0
CLIENT ENABLED
SPSC Profile Enabled
user_send_ble_data length:65

Device disconnected reason:3e

user_idle_start: time = 10

[08:51:58.886]收←◆b4:e6:02:fa:15:94 rssi = -77
epl_roll_batch
user_connect_start

[08:51:58.950]收←◆SPSC ENABLE
epl_fsm_logon_even
find same
send::65
user_sps_ble_send: len = 65
user_on_connection:b4:e6:02:fa:15:94
Device connected
status:0
CLIENT ENABLED
SPSC Profile Enabled
user_send_ble_data length:65

TX SIZE (MTU CHANGED)/LVL 244 185

[08:51:59.398]收←◆write_amount:244
size:244
write_amount:244
size:488
write_amount:244
size:732
write_amount:244
size:976

[08:51:59.478]收←◆write_amount:244
size:1220
write_amount:216
size:1436
I(epl) type:1
send::34
user_sps_ble_send: len = 34
image_update_proc
I(EPL):img.total:0x2500
I(EPL):img.crc32:0x201ad243
I(EPL):img.offset:0x0
I(EPL):img.type:0x5
I(EPL):img.length:0x572
I(EPL):op_index:220137366
send::46
user_sps_ble_send: len = 46
epl_image_reinit
1…
2…

[08:52:01.507]收←◆\0\0
0A 31 2E 2E 2E 0A 32 2E 2E 2E 0A 00 06 03 18 00

2020-12-17 08:52:06.984 [pool-1-thread-3582] INFO  ApError - {
	"opName":	"apErrorLog",
	"apMac":	"b4 e6 66 fa 15 94",
	"msg":	"Info->[FromServer]...*port[2] logoff mac[17][96]reason:0x[1f], result:[1]\n\n"
}
2020-12-17 08:52:30.370 [pool-1-thread-3582] INFO  ApError - {
	"opName":	"apErrorLog",
	"apMac":	"b4 e6 66 fa 15 94",
	"msg":	"Info->[FromServer]...*port[2] logoff mac[17][96]reason:0x[1f], result:[1]\n\n"
}
2020-12-17 08:52:40.113 [pool-1-thread-3582] INFO  ApError - {
	"opName":	"apErrorLog",
	"apMac":	"b4 e6 66 fa 15 94",
	"msg":	"Warn->[process_timeout_task]  port[1]send mac time out[17,96] =count=[0]\n"
}
2020-12-17 08:52:43.133 [pool-1-thread-3582] INFO  ApError - {
	"opName":	"apErrorLog",
	"apMac":	"b4 e6 66 fa 15 94",
	"msg":	"Info->[FromServer]...*port[1] logoff mac[17][96]reason:0x[1f], result:[1]\n\n"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值