我在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 会有什么影响吗?
我在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 会有什么影响吗?
你的设备是没有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);
}
如果你的设备上有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版本的检测?或者有没有其他方法
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实现就可以了?
jafil10 2023年 Mar 24日 08:28Code: 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。
愚者千虑必有一得 2023年 Mar 24日 10:14jafil10 2023年 Mar 24日 08:28Code: 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。
多谢了!
jafil10 2023年 Mar 24日 10:26愚者千虑必有一得 2023年 Mar 24日 10:14jafil10 2023年 Mar 24日 08:28Code: 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
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的在云端的配置就不生效了
jafil10 2023年 Mar 24日 14:40Code: 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的版本