通讯协议20241015

一、完整协议文档下载

下载附件:通讯协议_1015(1).xlsx

为了便于共享、理解、查阅,特此整理了以下文档说明。

以下文档说明,由此excel整理而来,如果与excel附件不同,以excel附件为准。

二、自定义广播包说明

自定义广播包中,包含了设备的MAC地址, 我们使用安卓版本的BLE调试助手查看对比即可知道

0x0BADF369BBDAF54C322E3237

三、设备上电后与APP连接过程

数据顺序流程图

示例数据如下:

四、蓝牙UUID说明

4.1 指令通道

4.2 音频通道

4.3 文件通道

5 设备属性

设备当前具备的属性有: 电量、时间、麦克风状态、固件版本号、音频蓝牙信息、录音模式、sd卡容量、文件列表、指示灯状态

由于历史原因,部分格式不遵守此格式,以实际情况为准。

属性一般都具备get方法,部分具备set方法。

由于历史原因,有部分协议,可能不完全遵守此格式,以excel文件的说明为准。

5.1 get方法数据格式

app发出数据示例:

{
  "method": "get",
  "id": "123",
  "ver": "1.0",
  "data":"battery"
}

设备返回数据示例:

{
    "method": "battery_reply",
    "id": "123",
    "ver": "1.0",
    "data":[
             {"battery":"100"}
           ],
    "error":[]
}

5.2 set方法数据格式

app发出数据示例:

{
  "method": "set",
  "id": "456",
  "ver": "1.0",
  "data":{"mic_status":"open"}
}

设备返回数据示例:

{
    "method": "mic_status_reply",
    "id": "456",
    "ver": "1.0",
    "data":[
             {"mic_status":"success"}
           ],
    "error":[]
}

5.3 属性列表

name key value type get set
当前电量 battery 返回值为电量百分比 string
设置设备的时间 sync_time 年月日时分秒YYYYMMDDHHMM的格式,比如:"20230801113301" string x
获取设备的时间 cur_time 年月日时分秒的格式,比如:"20230801113301" string x
振动麦克风开关状态 mic_status "open"为打开,"close"为关闭 string
当前ibeacon序号 cur_ibeacon_id 比如:"6"表示序号为6 string x
固件版本号 sw_version 比如:"1.0"表示当前设备固件版本为1.0 string x
查询录音状态 rec_status 比如:"rec_start"表示录音开始,"rec_start"表示录音结束 string x
自动录音模式 rec_mode 比如:"rec_auto"表示自动录音,"rec_head"表示手动录音 string
查询SD卡剩余容量 sd_capacity 比如:"490"表示可用容量为490MB string x
查询录音指示灯状态 rec_led "open"为打开,"close"为关闭 string
录音模式 cur_rec_state 现场麦克风录音中:"live";通话录音中:呼入:"phone_in"呼出:"phone_out";蓝牙音频"bt_music";不在录音null" string x
文件是否自动上传 auto_update "open"为打开,"close"为关闭 string
usb功能是否打开 usb_otg_status "open"为打开,"close"为关闭 string

6. 设备服务

设备服务是指由设备提供的服务能力,比如,录音操作、音频列表查询,音频删除操作等。

设备服务都是由APP发起,设备返回执行结果的。

6.1 设备基础信息

app发出数据示例:

{
  "method": "get",
  "id": "123",
  "ver": "1.0",
  "data":"basic_info"
}

设备返回结果数据示例:

{
  "method": "basic_info_reply",
  "id": "123",
  "ver": "1.0",
  "data":
    [
     {"sw_version":"1.0"},
     {"battery":"100"},
     {"rec_led":"open"},
     {"rec_mode":"rec_auto"},
     {"language":"EN"},
     {"sd_total":65},
     {"sd_capacity":"490"}
     {"usb_otg":"open"}
     {"total_capacity":"512"}
   ]
    "error":[]
}

6.2 查询SD卡音频列表

按页获取音频列表,每页最多返回10个音频。

app发出数据示例:

获取第1页音频列表

{
  "method": "get",
  "id": "123",
  "ver": "1.0",
  "data":{"sd_list":1}
}

设备返回结果数据示例:

{
 "method":"sd_list_reply",
 "id":"123",
 "ver":"1.0",
 "data":[
  {"total":56}
  {"id":1,"size":512,"name":"320030003200330030003900300031003000390035003000310032002E006D0070003300"},
  {"id":2,"size":512,"name":"320030003200330030003900300031003000390035003000310033002E006D0070003300"},
  {"id":3,"size":512,"name":"320030003200330030003900300031003000390035003000310034002E006D0070003300"},
  {"id":4,"size":512,"name":"320030003200330030003900300031003000390035003000310035002E006D0070003300"},
  {"id":5,"size":512,""name":"320030003200330030003900300031003000390035003000310036002E006D0070003300"},
  {"id":6,"size":512,"name":"320030003200330030003900300031003000390035003000310037002E006D0070003300"},
  {"id":7,"size":512,"name":"320030003200330030003900300031003000390035003000310038002E006D0070003300"},
  {"id":8,"size":512,"name":"320030003200330030003900300031003000390035003000310039002E006D0070003300"},
  {"id":9,"size":512,"name":"320030003200330030003900300031003000390035003000320030002E006D0070003300"},
  {"id":10,"size":512,"name":"320030003200330030003900300031003000390035003000320031002E006D0070003300"},
"error":[]
}

每页最多10个数据,总页数据以此获取:(total/10+1)或0

6.3 获取音频蓝牙信息

app发出数据示例:

{
  "method": "get",
  "id": "123",
  "ver": "1.0",
  "data":"edr_ctkd"
}

设备返回结果数据示例:

{
    "method": "edr_ctkd_reply",
    "id": "123",
    "ver": "1.0",
    "data":
      [
       {"edr_name":"RecNow616c"},
      {"mac_addr":"ae92afd2616c"},
       {"connect_state":"connected"}
      ],
    "error":[]
}

6.4 根据序号删除SD卡中的指定音频(不建议使用)

此方法删除音频后,会导致音频序号自动重新分配。结果就是sd卡的音频序号与app的序号不同,会导致音频误删除。

如果要使用此方法,记得必须重新获取音频列表。

6.5 根据"音频名称"删除SD卡中的指定音频

app发出数据示例:

{
  "method": "set",
  "id": "123",
  "ver": "1.0",
  "data":{
          "sd_del_name":"20240605105111.MP3"
         }
}

设备返回结果数据示例:

{
    "method": "sd_del_name_reply",
    "id": "123",
    "ver": "1.0",
    "data":[
             {"sd_del_name":"success"}
           ],
    "error":[]
}

6.6 格式化SD卡

清空sd卡中所有音频

app发出数据示例:

{
  "method": "set",
  "id": "123",
  "ver": "1.0",
  "data":"sd_format"
}

设备返回结果数据示例:

{
    "method": "sd_format_reply",
    "id": "123",
    "ver": "1.0",
    "data":[
             {"sd_format":"success"}
           ],
    "error":[]
}

6.7 开始录音

app发出数据示例:

{
  "method":"s_begin_rec",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

设备返回结果数据示例:

录音开始后,APP可以在音频通道00010203-0405-0607-0809-0A0B0C0D2B18,接收到设备发出的音频数据。

{
  "method": "e_rec_start",
  "id": "123",
  "ver": "1.0",
  "params":[{"rec_state":"live"}]
}

6.8 停止录音

app发出数据示例:

{
  "method":"s_stop_rec",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

设备返回结果数据示例:

{
  "method": "e_rec_stop",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

6.9 恢复出厂设置

app发出数据示例:

{
  "method":"s_recover",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

设备返回结果数据示例:

{
 "method": "s_recover_reply",
 "id": "123",
 "ver": "1.0",
 "data":[
         {"s_recover":"suceess"}
        ],
 "error":[]
}

6.10 设备重启

app发出数据示例:

{
  "method":"s_reset",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

设备返回结果数据示例:

{
 "method": "s_reset_reply",
 "id": "123",
 "ver": "1.0",
 "data":[
         {"s_reset":"suceess"}
        ],
 "error":[]
}

6.11 断开蓝牙

app发出数据示例:

  {
  "method":"s_ble_disconnect",
  "id": "123",
  "ver": "1.0",
  "data":[]
}

设备返回结果数据示例:

{
  "method":"s_ble_disconnect_reply",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

6.12 解除绑定

app发出数据示例:

{
  "method":"s_remove_binding",
  "id": "123",
  "ver": "1.0",
  "data":[]
}

设备返回结果数据示例:

{
  "method":"s_remove_binding_reply",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

6.13 射频物理层测试

app发出数据示例:

{
  "method":"s_dut_test_mode",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

设备返回结果数据示例:

{
  "method":"s_dut_test_mode_reply",
  "id": "123",
  "ver": "1.0",
  "params":[]
}

7. 设备事件

由设备主动触发的事件。比如:电量低事件、录音开始/结束事件。不需要操作app,

设备主动推送到app, app接收后,需要返回执行结果给设备。

7.1 设备开始录音

设备物理按键触发后主动上报

设备主动推送数据示例:

{
  "method": "e_rec_start",
  "id": "123",
  "ver": "1.0",
  "params":[{"rec_state":"live"}]
}

APP响应数据示例:

{
  "method":"e_rec_start_reply",
  "id": "123",
  "ver": "1.0",
  "data":[{"e_rec_start":"success"}],
  "error":[]
}

7.2 设备结束录音

设备物理按键触发后主动上报

设备主动推送数据示例:

{
  "method": "e_rec_stop",
  "id": "123",
  "ver": "1.0",
  "data":[]
}

APP响应数据示例:

{
  "method":"e_rec_stop_reply",
  "id": "123",
  "ver": "1.0",
  "data":[{"e_rec_stop":"success"}],
  "error":[]
}

7.3 设备主动断开BLE连接

只在APP主动断开蓝牙时,才发送此信息。由设备主动断开连接的,断开后,APP禁止自动回连。

设备主动推送数据示例:

由设备主动断开连接的,断开后,APP禁止回连。

{
  "method":"e_ble_disconnected",
  "id":"233",
  "ver":"V1.31",
  "data":[]
}

APP响应数据示例:

{
  "method":"e_ble_disconnected",
  "id": "123",
  "ver": "V1.31",
  "data":[{"e_ble_disconnected":"success"}],
  "error":[]
}

7.4 设备电量变化

电量等级为0-100,30 秒主动上报一次

设备主动推送数据示例:

{
  "method": "e_battery",
  "id": "123",
  "ver": "1.0",
  "data":[{"e_battery":100}]
}

APP响应数据示例:

{
  "method":"e_battery_reply",
  "id": "123",
  "ver": "1.0",
  "data":[{"e_battery":"success"}],
  "error":[]
}

7.5 设备音频蓝牙连接成功

经典蓝牙状态,变化时主动通知

设备主动推送数据示例:

{
  "method":"e_bt_connected",
  "id":"233",
  "ver":"V1.31",
  "data":[]
}

APP响应数据示例:

{
  "method":"e_bt_connected_reply",
  "id": "123",
  "ver": "1.0",
  "data":[{"e_bt_connected":"success"}],
  "error":[]
}

7.6 设备音频蓝牙连接断开

经典蓝牙状态,变化时主动通知

设备主动推送数据示例:

{
  "method":"e_bt_disconnected",
  "id":"233",
  "ver":"V1.31",
  "data":[]
}

APP响应数据示例:

{
  "method":"e_bt_connected_reply",
  "id": "123",
  "ver": "1.0",
  "data":[{"e_bt_disconnected":"success"}],
  "error":[]
}

7.7 设备恢复出厂设置

设备主动推送数据示例:

{
   "method": "s_recover_reply",
   "id": "123",
   "ver": "1.0",
   "data":[
           {"s_recover":"suceess"}
          ],
   "error":[]
}

APP响应数据示例:

{
  "method":"recover_ready",
  "id": "123",
  "ver": "1.0",
  "data":[]
}

7.8 设备重启

设备主动推送数据示例:

{
   "method": "s_reset_reply",
   "id": "123",
   "ver": "1.0",
   "data":[
           {"s_reset":"suceess"}
          ],
   "error":[]
}

APP响应数据示例:

{
  "method":"s_reset_reply",
  "id": "123",
  "ver": "1.0",
  "data":[]
}

8. SD卡文件传输

SD卡文件的接收,是通过蓝牙uuid:00010203-0405-0607-0809-0A0B0C0D2B22

8.1 APP请求SD卡中的音频

支持断点续传,自定义开始传输的偏移位置。

一次只允许上传一个,APP若选中多个进行传输,需要在传输完后再用该指令申请传输。

app发出数据示例:

{
 "method":"s_update_start",
 "id":"123",
 "ver":"1.0",
 "params":[
          {"file_name":"20240605103744.MP3"},
          {"block_index":0},
          {"block_size":1024}
         ]
}

设备返回结果数据示例:

开始接收SD卡文件后,要在uuid:00010203-0405-0607-0809-0A0B0C0D2B22处理接收到的数据,保存成音频文件。

{
 "method":"s_update_start_reply",
 "id":"123",
 "ver":"1.0",
 "data":[
          {"mtu":"186"},
          {"file_size":"2048"},
          {"file_name":"320030003200330030003900
           300031003000390035003000310032002E00
           6D0070003300"}
        ],
  "error":[]
}

SD卡文件处理,注意事项

sd卡中的文件, 从数传蓝牙过来的每一包数据都有包头和校验码

在保存文件时,要把前8个字节排除,同时也要删除最后两个字节(这两个字节是crc校验码)

比如收到一包二进制数据:

[85, 170, 1, 246, 1, 2, 3, 4, 255, 243, 200, 196, 0, 10, 146, 70, 24, 0, 56, 68, 117, 0, 49, 144, 120, 91, 249, 236, 99, 121, 3, 255, 255, 255, 255, 255, 255, 255, 255, 247, 255, 255, 255, 255, 255, 253, 122, 184, 65, 221, 255, 255, 255, 255, 255, 255, 255, 255, 191, 255, 255, 255, 252, 192,.....]

那么block_size=[1,246]即0x01F6=502; block_index=[1,2,3,4]即0x01020304=16909060;

文件保存要排除前8个字节即[85, 170, 1, 246, 1,2,3,4]

同时也要删除最后两个字节(这两个字节是crc校验码)

8.2 APP取消请求SD卡中的音频

app发出数据示例:

{
 "method":"s_update_cancel",
 "id":"123",
 "ver":"1.0",
 "params":[]
}

设备返回结果数据示例:

开始接收SD卡文件后,要在uuid:00010203-0405-0607-0809-0A0B0C0D2B22处理接收到的数据,保存成音频文件。

{
 "method": "s_update_cancel_reply",
 "id": "123",
 "ver": "1.0",
 "data":[
          {"s_update_cancel":"suceess"}
        ],
 "error":[]
}

8.3 APP请求暂停传输SD卡中的音频

app发出数据示例:

{
 "method":"s_update_pause",
 "id":"123",
 "ver":"1.0",
 "params":[]
}

设备返回结果数据示例:

开始接收SD卡文件后,要在uuid:00010203-0405-0607-0809-0A0B0C0D2B22处理接收到的数据,保存成音频文件。

{
 "method": "s_update_pause_reply",
 "id": "123",
 "ver": "1.0",
 "data":[
          {"s_update_pause":"suceess"}
        ],
 "error":[]
}

8.4 设备通知文件上传完成

设备推送上传完成示例:

{
 "method":"s_update_end",
 "id":"123",
 "ver":"1.0",
 "params":[]
}

APP收到数据后响应示例:

文件传输完的最后一包后,触发此数据

{
 "method":"s_update_end_reply",
 "id":"123",
 "ver":"1.0",
 "data":[
          {"s_update_end_reply":"suceess"}
        ],
 "error":[]
}

设备接收到此数据后,会删除设备中的文件。


版本号 #38
由 huangyong 创建于 30 十月 2024 05:54:13
由 huangyong 更新于 4 十二月 2024 10:09:03