/**
****************************************************************************************
*
* @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
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"