升级通道号二三事
定义
升级通道号是涂鸦定义的设备中固件的唯一标记,用于固件OTA(Over-the-Air Technology,即空中下载技术)中指导给设备的哪个固件进行升级。
具体是如何起作用的
假设我们有个设备,模型如下:
升级流程(云端推送升级流程)如下:
它由4个固件组成,假设它要进行固件升级。目前固件升级是单个固件进行升级的。所以云端需要知道设备A的具体哪个固件要升级。才会返回xx固件是否存在升级信息。
这个时候,固件通道号在上图检测升级的地方就起到了作用。能区分出具体是设备的哪个固件做升级。
升级通道号在哪边可以改
在固件内部:
开发者可用通过涂鸦提供的sdk的接口,向主联网模块固件注册自己的【附加固件】。完成接入。
【附加固件】的定义中包含了通道号信息。
其中,主模块固件的通道号,是不允许设置的。默认是0,在sdk中也没有透出设置。
在IoT平台:
如图
涂鸦Iot平台中,客户自己上传固件的时候可以填写固件基本信息的时候,必须更改升级通道号成自己在固件中定义的通道号。
但是,这边我们看到【蓝牙固件】的升级通道号是不给改的。这是因为目前涂鸦对设备的几种固件类型:主模块固件、蓝牙固件、Zigbee固件、MCU固件的通道号做了规定。
但是对于主模块固件以外的其他固件,其实涂鸦没有做强制的规定,例如蓝牙固件为1,Zigbee固件为3。也可以设置成大于9的扩展通道。
比如一个设备中有多个蓝牙固件的时候。这个时候可以设置一个用1,一个就必须用其他非1的扩展通道了。
隐藏秘密
在IoT平台,当你选择的固件是涂鸦官方提供的,或者非自己的厂商固件的时候。这个时候你没办法编辑通道号。
这个时候其实这个产品固件,在开发者选中这个接入硬件的时候,也是存在通道号的,目前平台只是没有展示。无法修改。这个时候就需要涂鸦官方和其他固件厂商维护通道号的准确性。不然其他人选择这个接入硬件,或者通过复制,OEM别人的产品。拿到别人的固件后。就容易造成无法OTA的情况。
同一个产品换接入硬件(固件也更换),但是产品上的固件通道号和之前的一样会不会有影响
试想一个场景,假设你是产品A,从固件A换成了固件B,通道号和固件A还是一致的。假设你A固件和B固件都有设备出货。这个时候A固件出货的设备A和B固件出货的设备B都做升级,上报的通道号一样,这个时候云端如何知道你是哪个固件做升级?
其实对于这种情况,在涂鸦还有一个固件的唯一标识,那就是固件key,它是一个固件在涂鸦云端唯一不变的标记。对有出货的产品涂鸦会保留产品和固件key保存记录。例如上述例子中,产品A对应出货有固件A。云端知道有产品A有出货的固件A和固件B,但是单单靠通道号无法区分是哪个固件做升级。这个时候,就需要固件通过sdk额外上报自己的通道号对应的固件key是啥了。这个时候开发者可以通过sdk提供的上报固件key的接口,上报自己的固件key给云端以便云端区分哪个固件做升级。