错误码定义
本文档定义了蓝牙通信协议中所有的错误码及其含义。
错误码列表
应答包中通过错误码字段返回操作结果,以下是完整的错误码定义:
| 错误代码 | 十六进制 | 错误含义 | 说明 |
|---|---|---|---|
| 0 | 0x00 | 成功 | 操作成功完成 |
| 1 | 0x01 | 包格式错误 | 数据包格式不符合协议规范 |
| 2 | 0x02 | 密码错误 | 提供的密码不正确 |
| 3 | 0x03 | 网络中断 | 网络连接已断开 |
| 4 | 0x04 | 用户未登记 | 用户不存在或未注册 |
| 5 | 0x05 | 参数错误 | 请求参数不合法或缺失必要参数 |
| 6 | 0x06 | 需要鉴权 | 操作需要先进行身份验证 |
| 7 | 0x07 | 无权限 | 用户没有执行该操作的权限 |
| 8 | 0x08 | 应答超时 | 等待应答超时 |
| 9 | 0x09 | 权限校验错误 | 权限验证失败 |
| 10 | 0x0A | 钥匙不存在 | 指定的钥匙 ID 不存在 |
| 11 | 0x0B | 钥匙过期 | 钥匙已超过有效期 |
| 12 | 0x0C | 钥匙数量已到上限 | 无法添加更多钥匙 |
| 13 | 0x0D | 钥匙无效 | 钥匙状态异常或已失效 |
| 14 | 0x0E | 钥匙已存在 | 钥匙 ID 重复 |
| 15 | 0x0F | 用户已存在 | 用户 ID 重复 |
| 16 | 0x10 | 密码失效 | 密码已过期或被禁用 |
| 17 | 0x11 | 无效指令 | 指令代码不存在或不支持 |
| 18 | 0x12 | 门锁时间异常 | 门锁系统时间不正确 |
| 19 | 0x13 | 已废弃,不再使用 | |
| 20 | 0x14 | 已废弃,不再使用 | |
| 21 | 0x15 | APP(手机)未联网 | 移动设备无网络连接 |
| 22 | 0x16 | 正在开锁中 | 锁设备正处于开锁状态,请稍后 |
| ... | ... | ... | ... |
| 255 | 0xFF | 异常,未知错误 | 未分类的异常错误 |
错误码分类
成功状态(0x00)
json
{
"code": 0,
"message": "成功"
}协议相关(0x01 - 0x05)
- 0x01 - 包格式错误:检查数据包的包头、校验位等字段
- 0x02 - 密码错误:验证提供的密码是否正确
- 0x03 - 网络中断:检查设备网络连接状态
- 0x04 - 用户未登记:确认用户是否已注册
- 0x05 - 参数错误:检查请求参数的完整性和合法性
权限相关(0x06 - 0x09)
- 0x06 - 需要鉴权:需要先调用身份验证接口
- 0x07 - 无权限:当前用户角色无法执行此操作
- 0x08 - 应答超时:增加超时时间或检查设备状态
- 0x09 - 权限校验错误:检查签名计算是否正确
钥匙相关(0x0A - 0x0E)
- 0x0A - 钥匙不存在:检查钥匙 ID 是否正确
- 0x0B - 钥匙过期:检查钥匙的有效期设置
- 0x0C - 钥匙数量已到上限:删除无用钥匙后再添加
- 0x0D - 钥匙无效:检查钥匙状态和权限
- 0x0E - 钥匙已存在:使用其他钥匙 ID 或先删除旧钥匙
用户和密码(0x0F - 0x10)
- 0x0F - 用户已存在:使用其他用户 ID 或先删除旧用户
- 0x10 - 密码失效:检查密码的有效期和状态
系统相关(0x11 - 0x16, 0xFF)
- 0x11 - 无效指令:检查指令代码是否正确,固件是否支持
- 0x12 - 门锁时间异常:使用校时指令同步时间
- 0x15 - APP 未联网:检查移动设备网络连接
- 0x16 - 正在开锁中:等待当前操作完成后重试
- 0xFF - 未知错误:联系技术支持,提供完整日志
错误处理流程
常见错误处理
示例 1:包格式错误(0x01)
c
if (response.errorCode == 0x01) {
// 检查包头是否为 0xEF01EE02
// 检查 CRC 校验是否正确
// 检查字段长度是否符合协议
printf("包格式错误,请检查数据包结构\n");
}示例 2:需要鉴权(0x06)
c
if (response.errorCode == 0x06) {
// 先调用身份验证接口
authenticate(userID, password);
// 验证成功后重新发送请求
sendRequest(command);
}示例 3:钥匙过期(0x0B)
c
if (response.errorCode == 0x0B) {
// 更新钥匙的有效期
updateKeyExpireTime(keyID, newExpireTime);
printf("钥匙已过期,请更新有效期\n");
}调试建议
调试技巧
- 记录完整日志:保存请求和应答的原始数据包
- 检查时序:确认请求和应答的序号是否匹配
- 验证签名:打印 MD5 计算的源数据和结果
- 状态确认:定期查询设备状态,避免状态不一致
常见陷阱
- 大小端序错误导致数值解析错误
- 字符串未以
\0结尾导致数据错误 - CRC 校验范围不正确
- 加密类型设置与实际数据不匹配
