Android GB28181-2022 设备软件升级

  相对于GB/T 28181-2016, GB/T28181-2022增加了设备软件升级命令,走的是有应答设备控制流程,流程不复杂,简单概括就是通过SIP MESSAGE(Application/MANSCDP+xml)消息将新版本下载地址下发给国标设备,国标设备下载新版本,完成升级后再向SIP服务器发送升级结果通知命令。

   详细定义请参考国标,这里记录下实现时要注意的细节:

   1. 接入同一国标系统的多个设备(厂家、型号、固件版本可能都不一样),要保证下发正确的升级版本下载地址,就要在设备信息查询应答时提供下面三个字段:

<!-- 设备生产商(可选)-->
<Manufacturer>xxxxxxxx</Manufacturer>
 <!-- 设备型号(可选)-->
<Model>yyyyyyyyy</Model>
 <!-- 设备固件版本(可选)-->
<Firmware>zzzzzzzz</Firmware>

  2. 设备软件升级走的是应答设备控制流程,按照国标附录A.1描述, 应答命令中的SN值要和请求命令中的SN值一致.

  3. 新版本安装之前, 设备要注销登录, 版本安装成功后, 重新进行设备注册,注册成功后再发送设备软件升级成功通知命令.

  4. 设备软件升级请求命令中的SessionID要和设备软件升级结果通知命令中的SessionID一致,升级过程中可能要重启APP或者设备, 请求SessionID需要保存到文件或者数据库中。

  读文档枯燥乏味, 下面给出一个简单的信令实例, 方便快速上手写代码.

  设备软件升级命令:

<?xml version="1.0" ?>
<Control>
<CmdType>DeviceControl</CmdType>
<SN>80267728</SN>
<DeviceID>31020000011310000073</DeviceID>
<DeviceUpgrade>
<Manufacturer>test</Manufacturer>
<Firmware>V3.7.191-b20241227</Firmware>
<FileURL>https://192.168.1.73/upgrade/testv3-7-191-b20241227.apk</FileURL>
<SessionID>A1FBCA20ACF640D8BA317E4DC4620802677281FD</SessionID>
</DeviceUpgrade>
</Control>

  设备控制响应命令:

<?xml version="1.0" ?>
<Response>
<CmdType>DeviceControl</CmdType>
<SN>80267728</SN>
<DeviceID>31020000011310000073</DeviceID>
<Result>OK</Result>
</Response>

  设备软件升级成功通知命令:

<?xml version="1.0" ?>
<Notify>
<CmdType>DeviceUpgradeResult</CmdType>
<SN>2080267764</SN>
<DeviceID>31020000011310000073</DeviceID>
<SessionID>A1FBCA20ACF640D8BA317E4DC4620802677281FD</SessionID>
<UpgradeResult>OK</UpgradeResult>
<Firmware>V3.7.191-b20241227</Firmware>
</Notify>

  设备软件升级失败通知命令:

<?xml version="1.0" ?>
<Notify>
<CmdType>DeviceUpgradeResult</CmdType>
<SN>2081415830</SN>
<DeviceID>31020000011310000073</DeviceID>
<SessionID>A1FBCA20ACF640D8BA317E4DC4620802677281FD</SessionID>
<UpgradeResult>ERROR</UpgradeResult>
<Firmware>V3.7.179-b20231013</Firmware>
<UpgradeFailedReason>03</UpgradeFailedReason>
</Notify>

  相关定义接口:

/*
 * Copyright (C) 1130758427@qq.com. All rights reserved. 
 * 问题沟通微信:ldxevt
 */

package com.gb.ntsignalling;

import java.util.List;

public interface DeviceUpgradeInfo {
    /*
    * 设备固件版本(必选)
     */
    String Firmware();

    /*
    * 升级文件的完整路径(必选)
     */
    String FileURL();

    /*
    * 设备厂家(必选)
     */
    String Manufacturer();


    /*
    * 会话ID(必选)
     */
    String SessionID();

    /*
    * 扩展信息
     */
    List<StringPair> Extensions();
}


public interface GBSIPAgentDeviceUpgradeListener {
    /*
     * 设备软件升级文件地址传输命令
     */
    void ntsOnDeviceUpgradeCommand(String from_user_name, String from_user_name_at_domain,
                                   String sn, String device_id, DeviceUpgradeInfo info);
}


public interface GBSIPAgent {

   void setDeviceUpgradeListener(GBSIPAgentDeviceUpgradeListener deviceUpgradeListener);

  /*
    * 设备软件升级结果通知
    */
    boolean notifyDeviceUpgradeResult(String fromUserName, String fromUserNameAtDomain, String deviceID, String sessionID,
                                      boolean upgradeResult, String firmware, String upgradeFailedReason);


   其他接口省略
}

    整个升级流程不是太麻烦,现有代码中加入新的XML解析生成代码就好,其他问题微 信: ldxevt .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值