Page 1 of 2

【已解决】bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 23日 20:29
by jafil10

我在bk7231n的3.3.4 SDK进行二次开发,当设备连入云后,App端会显示模组的版本及MCU的版本。这两个版本是一样的。如果要使用模组的版本和MCU的版本显示一样,我查了SDK,用这个方法 tuya_iot_wf_mcu_dev_init 代替 tuya_iot_wf_soc_dev_init,可以实现App端模组版本和MCU端的版本显示不同。

使用 tuya_iot_wf_mcu_dev_init 会有什么影响吗?


Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 23日 20:44
by 愚者千虑必有一得

你的设备是没有mcu的是吧?如果没有mcu就不用tuya_iot_wf_mcu_dev_init。

tuyaos上报mcu版本其实还是为了兼容tuya app上的显示,是一个假的mcu版本,是在tuya_iot_wf_soc_dev_init里默认写了一个。如果你要修改的话,可以参考这个接口写一个,然后调用你重写的这个接口:

Code: Select all

/***********************************************************
*  Function: tuya_iot_wf_soc_dev_init_param->The devcie consists of wifi soc
*  Input: cfg
*         cbs->tuya wifi sdk user callbacks,note cbs->dev_ug_cb is useless
*         product_key->product key/proudct id,get from tuya open platform
*         wf_sw_ver->wifi module software version format:xx.xx.xx (0<=x<=9)
*  Output: none
*  Return: OPERATE_RET
***********************************************************/
OPERATE_RET tuya_iot_wf_soc_dev_init_param(IN CONST GW_WF_CFG_MTHD_SEL cfg, IN CONST GW_WF_START_MODE start_mode,
                                           IN CONST TY_IOT_CBS_S *cbs, IN CHAR_T *firmware_key,
                                           IN CHAR_T *product_key, IN CHAR_T *wf_sw_ver)
{
    if (NULL == product_key || NULL == wf_sw_ver || NULL == cbs) {
        return OPRT_INVALID_PARM;
    }

    PR_NOTICE("wifi soc init. pid:%s firmwarekey:%s ver:%s",
              product_key, (NULL == firmware_key) ? "NULL" : firmware_key, wf_sw_ver);

    GW_ATTACH_ATTR_T attr = {0};
    attr.tp = DEV_NM_NOT_ATH_SNGL;
    strncpy(attr.ver, wf_sw_ver, SW_VER_LEN);   /////// 注意,修改这里wf_sw_ver即可更换版本

    return tuya_iot_wf_dev_init(cfg, start_mode, cbs, firmware_key, product_key, wf_sw_ver, DEV_NM_ATH_SNGL, &attr, 1);
}

Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 23日 20:46
by 愚者千虑必有一得

如果你的设备上有mcu,则用tuya_iot_wf_mcu_dev_init,传入一个mcu版本。


Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 23日 21:06
by jafil10
愚者千虑必有一得 2023年 Mar 23日 20:46

如果你的设备上有mcu,则用tuya_iot_wf_mcu_dev_init,传入一个mcu版本。

有MCU的。那我就直接使用 tuya_iot_wf_mcu_dev_init 这个方法了。
那如何在实现MCU的OTA数据透传,比如说 SOC的版本是1.0.0,MCU的版本是1.0.0,此时MCU的固件需要升级到1.0.1,SOC的版本不需要更改。OTA接收和SOC与MCU之间的接收都是可以的。但因为只改了MCU的版本,SOC的版本没有修改,这样就会导致App里升级一直停留,最后超时。有没有方式可以跨过SOC版本的检测?或者有没有其他方法


Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 24日 08:28
by jafil10

Code: Select all

typedef struct {
    /** status update */
    GW_STATUS_CHANGED_CB gw_status_cb;
    /** gateway upgrade */
    GW_UG_INFORM_CB gw_ug_cb;
    /** gateway reset */
    GW_RESET_IFM_CB gw_reset_cb;
    /** structured DP info */
    DEV_OBJ_DP_CMD_CB dev_obj_dp_cb;
    /** raw DP info */
    DEV_RAW_DP_CMD_CB dev_raw_dp_cb;
    /** DP query */
    DEV_DP_QUERY_CB dev_dp_query_cb;
    /** sub-device upgrade */
    DEV_UG_INFORM_CB dev_ug_cb;
    /** sub-device reset */
    DEV_RESET_IFM_CB dev_reset_cb;
    /** active short url */
    ACTIVE_SHORTURL_CB active_shorturl;
    /** gateway upgrade pre-condition */
    GW_UG_INFORM_CB pre_gw_ug_cb;
    /** sub-device upgrade pre-condition */
    DEV_UG_INFORM_CB pre_dev_ug_cb;
} TY_IOT_CBS_S;

我看这边有几个upgrade的callback,我实践一下,gw_ug_cb及dev_ug_cb,在SOC的升级时,是不会触发的,但会触发 pre_gw_ug_cb,如果增加了pre_gw_ug_cb,就会导致升级无法进行。
但如果是MCU的升级,就会直接触发 gw_ug_cb。能帮忙描述一下,这些升级相关的callback什么时候会被调用吗? MCU的升级,是不是我直接在Callback实现就可以了?


Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 24日 10:14
by 愚者千虑必有一得
jafil10 2023年 Mar 24日 08:28

Code: Select all

typedef struct {
    /** status update */
    GW_STATUS_CHANGED_CB gw_status_cb;
    /** gateway upgrade */
    GW_UG_INFORM_CB gw_ug_cb;
    /** gateway reset */
    GW_RESET_IFM_CB gw_reset_cb;
    /** structured DP info */
    DEV_OBJ_DP_CMD_CB dev_obj_dp_cb;
    /** raw DP info */
    DEV_RAW_DP_CMD_CB dev_raw_dp_cb;
    /** DP query */
    DEV_DP_QUERY_CB dev_dp_query_cb;
    /** sub-device upgrade */
    DEV_UG_INFORM_CB dev_ug_cb;
    /** sub-device reset */
    DEV_RESET_IFM_CB dev_reset_cb;
    /** active short url */
    ACTIVE_SHORTURL_CB active_shorturl;
    /** gateway upgrade pre-condition */
    GW_UG_INFORM_CB pre_gw_ug_cb;
    /** sub-device upgrade pre-condition */
    DEV_UG_INFORM_CB pre_dev_ug_cb;
} TY_IOT_CBS_S;

我看这边有几个upgrade的callback,我实践一下,gw_ug_cb及dev_ug_cb,在SOC的升级时,是不会触发的,但会触发 pre_gw_ug_cb,如果增加了pre_gw_ug_cb,就会导致升级无法进行。
但如果是MCU的升级,就会直接触发 gw_ug_cb。能帮忙描述一下,这些升级相关的callback什么时候会被调用吗? MCU的升级,是不是我直接在Callback实现就可以了?

mcu ota 是通过ota channel来实现的,平台上配置了mcu 固件,选择ota 通道,然后在配置mcu固件升级之后,固件会收到对应通道的ota请求,这个请求会在你注册的回调里处理,我可以给你提供一个demo。


Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 24日 10:26
by jafil10
愚者千虑必有一得 2023年 Mar 24日 10:14
jafil10 2023年 Mar 24日 08:28

Code: Select all

typedef struct {
    /** status update */
    GW_STATUS_CHANGED_CB gw_status_cb;
    /** gateway upgrade */
    GW_UG_INFORM_CB gw_ug_cb;
    /** gateway reset */
    GW_RESET_IFM_CB gw_reset_cb;
    /** structured DP info */
    DEV_OBJ_DP_CMD_CB dev_obj_dp_cb;
    /** raw DP info */
    DEV_RAW_DP_CMD_CB dev_raw_dp_cb;
    /** DP query */
    DEV_DP_QUERY_CB dev_dp_query_cb;
    /** sub-device upgrade */
    DEV_UG_INFORM_CB dev_ug_cb;
    /** sub-device reset */
    DEV_RESET_IFM_CB dev_reset_cb;
    /** active short url */
    ACTIVE_SHORTURL_CB active_shorturl;
    /** gateway upgrade pre-condition */
    GW_UG_INFORM_CB pre_gw_ug_cb;
    /** sub-device upgrade pre-condition */
    DEV_UG_INFORM_CB pre_dev_ug_cb;
} TY_IOT_CBS_S;

我看这边有几个upgrade的callback,我实践一下,gw_ug_cb及dev_ug_cb,在SOC的升级时,是不会触发的,但会触发 pre_gw_ug_cb,如果增加了pre_gw_ug_cb,就会导致升级无法进行。
但如果是MCU的升级,就会直接触发 gw_ug_cb。能帮忙描述一下,这些升级相关的callback什么时候会被调用吗? MCU的升级,是不是我直接在Callback实现就可以了?

mcu ota 是通过ota channel来实现的,平台上配置了mcu 固件,选择ota 通道,然后在配置mcu固件升级之后,固件会收到对应通道的ota请求,这个请求会在你注册的回调里处理,我可以给你提供一个demo。

多谢了!


Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 24日 12:20
by yangjie
jafil10 2023年 Mar 24日 10:26
愚者千虑必有一得 2023年 Mar 24日 10:14
jafil10 2023年 Mar 24日 08:28

Code: Select all

typedef struct {
    /** status update */
    GW_STATUS_CHANGED_CB gw_status_cb;
    /** gateway upgrade */
    GW_UG_INFORM_CB gw_ug_cb;
    /** gateway reset */
    GW_RESET_IFM_CB gw_reset_cb;
    /** structured DP info */
    DEV_OBJ_DP_CMD_CB dev_obj_dp_cb;
    /** raw DP info */
    DEV_RAW_DP_CMD_CB dev_raw_dp_cb;
    /** DP query */
    DEV_DP_QUERY_CB dev_dp_query_cb;
    /** sub-device upgrade */
    DEV_UG_INFORM_CB dev_ug_cb;
    /** sub-device reset */
    DEV_RESET_IFM_CB dev_reset_cb;
    /** active short url */
    ACTIVE_SHORTURL_CB active_shorturl;
    /** gateway upgrade pre-condition */
    GW_UG_INFORM_CB pre_gw_ug_cb;
    /** sub-device upgrade pre-condition */
    DEV_UG_INFORM_CB pre_dev_ug_cb;
} TY_IOT_CBS_S;

我看这边有几个upgrade的callback,我实践一下,gw_ug_cb及dev_ug_cb,在SOC的升级时,是不会触发的,但会触发 pre_gw_ug_cb,如果增加了pre_gw_ug_cb,就会导致升级无法进行。
但如果是MCU的升级,就会直接触发 gw_ug_cb。能帮忙描述一下,这些升级相关的callback什么时候会被调用吗? MCU的升级,是不是我直接在Callback实现就可以了?

mcu ota 是通过ota channel来实现的,平台上配置了mcu 固件,选择ota 通道,然后在配置mcu固件升级之后,固件会收到对应通道的ota请求,这个请求会在你注册的回调里处理,我可以给你提供一个demo。

多谢了!

你好,下面是带有 MCU 升级的demo

test_soc_mcu_ota.zip
(9.95 MiB) Downloaded 165 times

Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 24日 14:40
by jafil10

Code: Select all

attach_mcu.tp = DEV_NM_ATH_SNGL;
    strcpy(attach_mcu.ver, "2.0.1");
    /* 注册 SOC 和 mcu 升级通道 */
    rt = tuya_iot_wf_dev_init(CONNECT_MODE,
                              WF_START_MODE,
                              &iot_cbs,
                              NULL,
                              p_pid_str,
                              USER_SW_VER,
                              DEV_NM_ATH_SNGL,
                              &attach_mcu,
                              1);

我按示例去注册,发现App端只会显示模组的版本,并不会显示MCU的版本。然后MCU的在云端的配置就不生效了


Re: bk7231n_3.3.4如何改变App端显示的MCU版本

Posted: 2023年 Mar 24日 14:48
by jafil10
jafil10 2023年 Mar 24日 14:40

Code: Select all

attach_mcu.tp = DEV_NM_ATH_SNGL;
    strcpy(attach_mcu.ver, "2.0.1");
    /* 注册 SOC 和 mcu 升级通道 */
    rt = tuya_iot_wf_dev_init(CONNECT_MODE,
                              WF_START_MODE,
                              &iot_cbs,
                              NULL,
                              p_pid_str,
                              USER_SW_VER,
                              DEV_NM_ATH_SNGL,
                              &attach_mcu,
                              1);

我按示例去注册,发现App端只会显示模组的版本,并不会显示MCU的版本。然后MCU的在云端的配置就不生效了

而使用方法 tuya_iot_wf_mcu_dev_init,在App端可以正常显示出模组的版本和MCU的版本