int TYSDK_InitThread()
{
    INFO_PRINTF("TUYA SDK start init\n");
    char *token = NULL;
    tuya_ext_bt_init();
    tuya_os_bt_intf_init();
    printf("*************\n %p \n*****************\n", tuya_os_adapter_get_intf(INTF_BT));
    printf("*************\n %p \n*****************\n", ((TUYA_OS_BT_INTF *)tuya_os_adapter_get_intf(INTF_BT))->port_init);
    tuya_ipc_platform_uart_init("/dev/ttyAMA2");

    INFO_PRINTF("\n");
    
    DASSERT(!XMSDK_WifiInit("eth1", "/usr/sbin", WIFI_XM713G), );
    INFO_PRINTF("TUYA_IPC_SDK_START(WIFI_INIT_AP, token);\n");
    int ret = TUYA_IPC_SDK_START(WIFI_INIT_AP, token);
    INFO_PRINTF("TUYA SDK start ok\n");
    TUYA_APP_LOW_POWER_DISABLE();//上报当前的状态为唤醒状态

    return ret;
}
OPERATE_RET TUYA_IPC_SDK_START(WIFI_INIT_MODE_E connect_mode, CHAR_T *p_token)
{
    INFO_PRINTF("\n");
    PR_DEBUG("SDK Version:%s\r\n", tuya_ipc_get_sdk_info());
    TUYA_IPC_SDK_RUN_VAR_S ipc_sdk_run_var = {0};
    memset(&ipc_sdk_run_var, 0, sizeof(ipc_sdk_run_var));

    GetDeviceHWInfo();

    memset(&s_mgr_info, 0, sizeof(IPC_MGR_INFO_S));
    strcpy(s_mgr_info.storage_path, IPC_APP_STORAGE_PATH);
    strcpy(s_mgr_info.upgrade_file_path, IPC_APP_UPGRADE_FILE);
    strcpy(s_mgr_info.sd_base_path, IPC_APP_SD_BASE_PATH);
    strcpy(s_mgr_info.product_key, IPC_APP_PID);
    strcpy(s_mgr_info.uuid, IPC_APP_UUID);
    strcpy(s_mgr_info.auth_key, IPC_APP_AUTHKEY);
    strcpy(s_mgr_info.dev_sw_version, IPC_APP_VERSION);
    s_mgr_info.max_p2p_user = 5; // TUYA P2P supports 5 users at the same time, including live preview and playback
    PR_DEBUG("Init Value.storage_path %s", s_mgr_info.storage_path);
    PR_DEBUG("Init Value.upgrade_file_path %s", s_mgr_info.upgrade_file_path);
    PR_DEBUG("Init Value.sd_base_path %s", s_mgr_info.sd_base_path);
    PR_DEBUG("Init Value.product_key %s", s_mgr_info.product_key);
    PR_DEBUG("Init Value.uuid %s", s_mgr_info.uuid);
    PR_DEBUG("Init Value.auth_key %s", s_mgr_info.auth_key);
    PR_DEBUG("Init Value.p2p_id %s", s_mgr_info.p2p_id);
    PR_DEBUG("Init Value.dev_sw_version %s", s_mgr_info.dev_sw_version);
    PR_DEBUG("Init Value.max_p2p_user %u", s_mgr_info.max_p2p_user);

    /*certification information(essential)*/
    strcpy(ipc_sdk_run_var.iot_info.product_key, IPC_APP_PID);
    strcpy(ipc_sdk_run_var.iot_info.uuid, IPC_APP_UUID);
    strcpy(ipc_sdk_run_var.iot_info.auth_key, IPC_APP_AUTHKEY);
    strcpy(ipc_sdk_run_var.iot_info.dev_sw_version, APP_VERSION);
    strcpy(ipc_sdk_run_var.iot_info.cfg_storage_path, IPC_APP_STORAGE_PATH);
#ifdef __LOWPOWER_FUNC
    // low power  device
    ipc_sdk_run_var.iot_info.dev_type = LOW_POWER_DEV;
#else
    ipc_sdk_run_var.iot_info.dev_type = NORMAL_POWER_DEV;
    ipc_sdk_run_var.quick_start_info.enable = 1;
    ipc_sdk_run_var.quick_start_info.mode = TUYA_IPC_LOW_POWER_MODE;
#endif
    INFO_PRINTF("ipc_sdk_run_var.iot_info.dev_type=[%d]\n", ipc_sdk_run_var.iot_info.dev_type);
    /*connect mode (essential)*/
    ipc_sdk_run_var.net_info.connect_mode = connect_mode;
    ipc_sdk_run_var.net_info.net_status_change_cb = __IPC_APP_Get_Net_Status_cb;
    if (p_token)
    {
        strcpy(ipc_sdk_run_var.debug_info.qrcode_token, p_token);
    }
    INFO_PRINTF("\n");

    /*media info (essential)*/
    /* main stream(HD), video configuration*/
    /* NOTE
    FIRST:If the main stream supports multiple video stream configurations, set each item to the upper limit of the allowed configuration.
    SECOND:E_IPC_STREAM_VIDEO_MAIN must exist.It is the data source of SDK.
    please close the E_IPC_STREAM_VIDEO_SUB for only one stream*/
    ipc_sdk_run_var.media_info.media_info.channel_enable[E_IPC_STREAM_VIDEO_MAIN] = TRUE;                   /* Whether to enable local HD video streaming */
    ipc_sdk_run_var.media_info.media_info.video_fps[E_IPC_STREAM_VIDEO_MAIN] = g_VideoFps;                  /* FPS */
    ipc_sdk_run_var.media_info.media_info.video_gop[E_IPC_STREAM_VIDEO_MAIN] = g_VideoFps * 4;              /* GOP */
    ipc_sdk_run_var.media_info.media_info.video_bitrate[E_IPC_STREAM_VIDEO_MAIN] = TUYA_VIDEO_BITRATE_1_5M; /* Rate limit */
    ipc_sdk_run_var.media_info.media_info.video_width[E_IPC_STREAM_VIDEO_MAIN] = g_stVideoResolution[0].width;
    ; /* Single frame resolution of width*/
    ipc_sdk_run_var.media_info.media_info.video_height[E_IPC_STREAM_VIDEO_MAIN] = g_stVideoResolution[0].height;
    ;                                                                                                   /* Single frame resolution of height */
    ipc_sdk_run_var.media_info.media_info.video_freq[E_IPC_STREAM_VIDEO_MAIN] = 90000;                  /* Clock frequency */
    ipc_sdk_run_var.media_info.media_info.video_codec[E_IPC_STREAM_VIDEO_MAIN] = TUYA_CODEC_VIDEO_H265; /* Encoding format */

    /* substream(HD), video configuration */
    /* Please note that if the substream supports multiple video stream configurations, please set each item to the upper limit of the allowed configuration. */
    ipc_sdk_run_var.media_info.media_info.channel_enable[E_IPC_STREAM_VIDEO_SUB] = TRUE;                        /* Whether to enable local SD video stream */
    ipc_sdk_run_var.media_info.media_info.video_fps[E_IPC_STREAM_VIDEO_SUB] = g_VideoFps;                       /* FPS */
    ipc_sdk_run_var.media_info.media_info.video_gop[E_IPC_STREAM_VIDEO_SUB] = g_VideoFps * 4;                   /* GOP */
    ipc_sdk_run_var.media_info.media_info.video_bitrate[E_IPC_STREAM_VIDEO_SUB] = TUYA_VIDEO_BITRATE_1M;        /* Rate limit */
    ipc_sdk_run_var.media_info.media_info.video_width[E_IPC_STREAM_VIDEO_SUB] = g_stVideoResolution[1].width;   /* Single frame resolution of width */
    ipc_sdk_run_var.media_info.media_info.video_height[E_IPC_STREAM_VIDEO_SUB] = g_stVideoResolution[1].height; /* Single frame resolution of height */
    ipc_sdk_run_var.media_info.media_info.video_freq[E_IPC_STREAM_VIDEO_SUB] = 90000;                           /* Clock frequency */
    ipc_sdk_run_var.media_info.media_info.video_codec[E_IPC_STREAM_VIDEO_SUB] = TUYA_CODEC_VIDEO_H264;          /* Encoding format */
#ifdef _H265_SUB_STREAM
    ipc_sdk_run_var.media_info.media_info.video_codec[E_IPC_STREAM_VIDEO_SUB] = TUYA_CODEC_VIDEO_H265; /* Encoding format */
#endif
    INFO_PRINTF("\n");

    /* Audio stream configuration.
    Note: The internal P2P preview, cloud storage, and local storage of the SDK are all use E_IPC_STREAM_AUDIO_MAIN data. */
    ipc_sdk_run_var.media_info.media_info.channel_enable[E_IPC_STREAM_AUDIO_MAIN] = TRUE;                   /* Whether to enable local sound collection */
    ipc_sdk_run_var.media_info.media_info.audio_codec[E_IPC_STREAM_AUDIO_MAIN] = TUYA_CODEC_AUDIO_PCM;      /* Encoding format */
    ipc_sdk_run_var.media_info.media_info.audio_sample[E_IPC_STREAM_AUDIO_MAIN] = TUYA_AUDIO_SAMPLE_8K;     /* Sampling Rate */
    ipc_sdk_run_var.media_info.media_info.audio_databits[E_IPC_STREAM_AUDIO_MAIN] = TUYA_AUDIO_DATABITS_16; /* Bit width */
    ipc_sdk_run_var.media_info.media_info.audio_channel[E_IPC_STREAM_AUDIO_MAIN] = TUYA_AUDIO_CHANNEL_MONO; /* channel */
    ipc_sdk_run_var.media_info.media_info.audio_fps[E_IPC_STREAM_AUDIO_MAIN] = 25;                          /* Fragments per second */

    memcpy(&s_media_info, &ipc_sdk_run_var.media_info.media_info, sizeof(IPC_MEDIA_INFO_S));
    s_media_info_for_3rd = s_media_info;
    s_media_info_for_3rd.channel_enable[E_IPC_STREAM_VIDEO_SUB] = TRUE;                        /* Whether to enable local SD video stream */
    s_media_info_for_3rd.video_fps[E_IPC_STREAM_VIDEO_SUB] = g_VideoFps;                       /* FPS */
    s_media_info_for_3rd.video_gop[E_IPC_STREAM_VIDEO_SUB] = g_VideoFps * 4;                   /* GOP */
    s_media_info_for_3rd.video_bitrate[E_IPC_STREAM_VIDEO_SUB] = TUYA_VIDEO_BITRATE_1M;        /* Rate limit */
    s_media_info_for_3rd.video_width[E_IPC_STREAM_VIDEO_SUB] = g_stVideoResolution[1].width;   /* Single frame resolution of width */
    s_media_info_for_3rd.video_height[E_IPC_STREAM_VIDEO_SUB] = g_stVideoResolution[1].height; /* Single frame resolution of height */
    s_media_info_for_3rd.video_freq[E_IPC_STREAM_VIDEO_SUB] = 90000;                           /* Clock frequency */
    s_media_info_for_3rd.video_codec[E_IPC_STREAM_VIDEO_SUB] = TUYA_CODEC_VIDEO_H264;          /* Encoding format */

    /*local storage (custome whether enable or not)*/
    ipc_sdk_run_var.local_storage_info.enable = 1;
    ipc_sdk_run_var.local_storage_info.max_event_num_per_day = 500;
    ipc_sdk_run_var.local_storage_info.skills = TUYA_IPC_SKILL_BASIC; // 0 means all skills
    ipc_sdk_run_var.local_storage_info.sd_status_cb = tuya_ipc_sd_get_status;
    strcpy(ipc_sdk_run_var.local_storage_info.storage_path, IPC_APP_SD_BASE_PATH);

    /*cloud storage (custome whether enable or not)*/
    /*if no ase,it can equal NULL;*/
    extern OPERATE_RET AES_CBC_init(VOID);
    extern OPERATE_RET AES_CBC_encrypt(IN BYTE_T * pdata_in, IN UINT_T data_len,
                                       INOUT BYTE_T * pdata_out, OUT UINT_T * pdata_out_len,
                                       IN BYTE_T * pkey, IN BYTE_T * piv);
    extern OPERATE_RET AES_CBC_destory(VOID);
    ipc_sdk_run_var.cloud_storage_info.enable = 1;
    ipc_sdk_run_var.aes_hw_info.aes_fun.init = AES_CBC_init;
    ipc_sdk_run_var.aes_hw_info.aes_fun.encrypt = AES_CBC_encrypt;
    ipc_sdk_run_var.aes_hw_info.aes_fun.destory = AES_CBC_destory;
    INFO_PRINTF("\n");

    /*p2p function (essential)*/
    ipc_sdk_run_var.p2p_info.max_p2p_client = 5;
    ipc_sdk_run_var.p2p_info.live_mode = TRANS_DEFAULT_HIGH;
    ipc_sdk_run_var.p2p_info.transfer_event_cb = __TUYA_APP_p2p_event_cb;
    ipc_sdk_run_var.p2p_info.rev_audio_cb = __TUYA_APP_rev_audio_cb;

    /*AI detect (custome whether enable or not)*/
    ipc_sdk_run_var.cloud_ai_detct_info.enable = 0;

    /*door bell (custome whether enable or not)*/
    ipc_sdk_run_var.video_msg_info.enable = 0;
    ipc_sdk_run_var.video_msg_info.type = MSG_BOTH;
    ipc_sdk_run_var.video_msg_info.msg_duration = 10;
	/*AI detect (custome whether enable or not)*/
	ipc_sdk_run_var.cloud_ai_detct_info.enable = 1;

    /*dp function(essential)*/
    ipc_sdk_run_var.dp_info.dp_query = IPC_APP_handle_dp_query_objs;
    ipc_sdk_run_var.dp_info.raw_dp_cmd_proc = IPC_APP_handle_dp_cmd_objs;
    ipc_sdk_run_var.dp_info.common_dp_cmd_proc = IPC_APP_handle_dp_cmd_objs;

    /*upgrade function(essential)*/
    ipc_sdk_run_var.upgrade_info.enable = true;
    ipc_sdk_run_var.upgrade_info.upgrade_cb = IPC_APP_Upgrade_Inform_cb;

    ipc_sdk_run_var.iot_info.gw_reset_cb = IPC_APP_Reset_System_CB;
    ipc_sdk_run_var.iot_info.gw_restart_cb = IPC_APP_Restart_Process_CB;

    INFO_PRINTF("\n");

    OPERATE_RET ret;
    ret = tuya_ipc_sdk_start(&ipc_sdk_run_var);
    if (ret != 0)
    {
        printf("ipc sdk v5 start fail,please check run parameter，ret=%d\n", ret);
    }
    INFO_PRINTF("\n");
    if (!g_RegeiseStatus)
    {
        static pthread_t id;
        if (pthread_create(&id, NULL, (void *(*)(void *))ConfigTimer, NULL) < 0)
        {
            ERROR_PRINTF("pthread_create ConfigTimer failed\n");
        }
    }
    return ret;
}
/**
 *函数线程不安兿
 **/
OPERATE_RET tuya_ipc_sdk_start(IN CONST TUYA_IPC_SDK_RUN_VAR_S *pRunInfo)
{
    printf("sdk start\n");
    if (NULL == pRunInfo)
    {
        PR_ERR("start sdk para is NULL\n");
        return OPRT_INVALID_PARM;
    }

    OPERATE_RET ret = 0;
    STATIC BOOL_T s_ipc_sdk_started = FALSE;
    if (TRUE == s_ipc_sdk_started)
    {
        PR_DEBUG("IPC SDK has started\n");
        return ret;
    }

    s_ipc_sdk_run_handler.sdk_run_info = *pRunInfo;
    // TODO loglevel
    //pRunInfo->debug_info.log_level=4;
    //INFO_PRINTF("log_level %d", pRunInfo->debug_info.log_level);
    //tuya_ipc_set_log_attr(pRunInfo->debug_info.log_level, NULL);

    // 低功耿 优先弿启P2P
    // if (s_ipc_sdk_run_handler.sdk_run_info.quick_start_info.enable)
    {

        // TODO pthread attr set
//        pthread_attr_t attr;
//        pthread_attr_init(&attr);
//        pthread_attr_setstacksize(&attr, stack_size);
#if 0
        pthread_t low_power_p2p_thread_handler;
        int op_ret = pthread_create(&low_power_p2p_thread_handler,NULL, tuya_ipc_sdk_low_power_p2p_init_proc, NULL);
        if(op_ret < 0)
        {
            PR_ERR("create p2p start thread is error\n");
            return -1;
        }
#endif
    }
    INFO_PRINTF("p2p init\n");
    pthread_t P2pInit_id;
    pthread_create(&P2pInit_id, NULL, (void *)P2PInitThread, NULL);
    int ap_mode_on_off = IPC_APP_get_ap_mode_config();
    // if (ap_mode_on_off == 0)
    {
#if 1

        // setup:创建等待mqtt上线进程，mqtt上线后，再开启与网络相关的业势
        // TODO pthread attr set
        tuya_ipc_set_permit_mqtt_connect(true);
        INFO_PRINTF("tuya_ipc_set_permit_mqtt_connect true\n");
        int op_ret = pthread_create(&s_ipc_sdk_run_handler.mqtt_status_change_handle, NULL, tuya_ipc_sdk_mqtt_online_proc, NULL);
        if (op_ret < 0)
        {
            PR_ERR("create tuya_ipc_sdk_mqtt_online_proc  thread is error\n");
            return -1;
        }

        
        
#endif
    }

    // setup2:init sdk
    TUYA_IPC_ENV_VAR_S env;
    memset(&env, 0, sizeof(TUYA_IPC_ENV_VAR_S));
    strcpy(env.storage_path, pRunInfo->iot_info.cfg_storage_path);
    strcpy(env.product_key, pRunInfo->iot_info.product_key);
    strcpy(env.uuid, pRunInfo->iot_info.uuid);
    strcpy(env.auth_key, pRunInfo->iot_info.auth_key);
    strcpy(env.dev_sw_version, pRunInfo->iot_info.dev_sw_version);
    strcpy(env.dev_serial_num, "tuya_ipc");
    // TODO:raw
    env.dev_raw_dp_cb = IPC_APP_handle_dp_cmd_objs;
    env.dev_obj_dp_cb = IPC_APP_handle_dp_cmd_objs;
    env.dev_dp_query_cb = IPC_APP_handle_dp_query_objs;  // TODO:这个接口无实际用逿
    env.status_changed_cb = __IPC_APP_Get_Net_Status_cb; // TODO:这个接口霿要部分对夿
    // env.gw_rst_cb = tuya_ipc_sdk_app_reset_cb;//TODO 这个接口霿要对夿
    // env.gw_restart_cb = tuya_ipc_sdk_app_restart_cb;//TODO:这个接口霿要部分对夿
    env.dev_obj_dp_cb = IPC_APP_handle_dp_cmd_objs;
    env.dev_dp_query_cb = IPC_APP_handle_dp_query_objs;
    env.status_changed_cb = __IPC_APP_Get_Net_Status_cb;
    env.upgrade_cb_info.upgrade_cb = s_upgrade_cb.upgrade_cb;
    env.gw_rst_cb = IPC_APP_Reset_System_CB;
    env.gw_restart_cb = IPC_APP_Restart_Process_CB;
    env.mem_save_mode = TRUE;
#if defined(QRCODE_ACTIVE_MODE) && (QRCODE_ACTIVE_MODE == 1)
    env.qrcode_active_cb = tuya_ipc_qrcode_active_cb;
#endif
    env.dev_type = pRunInfo->iot_info.dev_type;
    INFO_PRINTF("tuya_ipc_init_sdk,env.dev_type=[%d]\n", env.dev_type);
    ret = tuya_ipc_init_sdk(&env);
    if (OPRT_OK != ret)
    {
        PR_ERR("init sdk is error\n");
        return ret;
    }

    INFO_PRINTF();
    struct timeval tv;
    INT_T time_zone_current_sys = 0;
    char time_zone[10];  // 存储结果
    memset(&tv, 0, sizeof(struct timeval));
	ret = gettimeofday(&tv,NULL);	
    tuya_ipc_set_service_time(tv.tv_sec);
    XMSDK_GetTimeZoneInfo(&time_zone_current_sys);
    sprintf(time_zone, "%+02d:%02d", time_zone_current_sys/60, time_zone_current_sys%60);
    uni_set_time_zone(time_zone);

    char cmd_buff[128] = {0};
    sprintf(cmd_buff,"echo \"set time:%ld,set time_zone:%s\" >> /var/1.txt; cat /proc/uptime >> /var/1.txt",tv.tv_sec,time_zone);
    XMSDK_SafeSystem(cmd_buff);
    if(tuya_ipc_set_log_attr(4, NULL) !=OPRT_OK )
    {
        INFO_PRINTF("tuya_ipc_set_log_attr 4 failed\n");
    }
    // setup 1: ring buffer 创建?
    ret = tuya_ipc_sdk_ring_buffer_create(&pRunInfo->media_info.media_info);
    if (OPRT_OK != ret)
    {
        PR_ERR("create ring buffer is error\n");
        return ret;
    }
    INFO_PRINTF("pRunInfo->net_info.connect_mode %d", pRunInfo->net_info.connect_mode);



    /*注册涂鸦回调函数*/
    XM_TYFUNC_CALL_API_S sTYCallApi;
    memset(&sTYCallApi, 0, sizeof(XM_TYFUNC_CALL_API_S));
    sTYCallApi.pfWriteVideoFrameCall = TUYA_APP_Put_Frame;
    sTYCallApi.pfWriteAudioFrameCall = TUYA_APP_Put_Frame;
    sTYCallApi.v_handle = tuya_ipc_ring_buffer_open(0, 0, 0, E_RBUF_WRITE);
    sTYCallApi.v_handle_sub = tuya_ipc_ring_buffer_open(0, 0, 1, E_RBUF_WRITE);
    sTYCallApi.a_handle_sub = tuya_ipc_ring_buffer_open(0, 0, E_IPC_STREAM_AUDIO_MAIN, E_RBUF_WRITE);
    DASSERT(!XM_RegisterTYCallFunc(&sTYCallApi), return -1);

    /*-----------本地录像提前初始化-------------------------*/
    TUYA_IPC_STORAGE_VAR_S stg_var;
    memset(&stg_var, 0, SIZEOF(TUYA_IPC_STORAGE_VAR_S));
    memcpy(stg_var.base_path, s_ipc_sdk_run_handler.sdk_run_info.local_storage_info.storage_path, SS_BASE_PATH_LEN);
    stg_var.media_setting = s_ipc_sdk_run_handler.sdk_run_info.media_info.media_info;
    stg_var.max_event_per_day = s_ipc_sdk_run_handler.sdk_run_info.local_storage_info.max_event_num_per_day;
    stg_var.skills = s_ipc_sdk_run_handler.sdk_run_info.local_storage_info.skills;
    stg_var.sd_status_changed_cb = tuya_ipc_sdk_sd_status_cb;

    ret = tuya_ipc_ss_init(&stg_var);
    INFO_PRINTF("local storage init result is %d\n", ret);
    tuya_ipc_ss_pb_accelerate_send_frame(30);
    while (ret != XM_SUCCESS)//SD卡初始化失败重新初始化
    {
        ret = tuya_ipc_ss_init(&stg_var);
        INFO_PRINTF("local storage init result is %d\n", ret);
        //sleep(1);
    }
    /*restart sd record after system reboot*/
    //sleep(2); // tuya init need some time
    XMSDK_SYSTEM_TIME_S pCurTime;
    memset(&pCurTime,0,sizeof(XMSDK_SYSTEM_TIME_S));
    XMSDK_GetCurrentTime(&pCurTime);
    if(pCurTime.year != 1970)
    {
        IPC_APP_set_sd_record_onoff(IPC_APP_get_sd_record_onoff());
    }else
    {
        /*防止rtc时钟复位，时间异常，导致录像功能异常*/
        ERROR_PRINTF("year is 1970 , wait online and start record...\n");
    }
    XMSDK_ForceIFrame(0,0);
    /*-----------本地录像提前初始化完成-------------------------*/
    int sleep_mode = IPC_APP_get_sleep_mode();
    if(GetWakeupMethod() == 2 && !sleep_mode)
    {
        tuya_ipc_ss_start_event();
    }
    XMSDK_SafeSystem("echo \"record start\" >> /var/1.txt; cat /proc/uptime >> /var/1.txt");
    // setup 3:

    ret = tuya_ipc_start_sdk(pRunInfo->net_info.connect_mode, pRunInfo->debug_info.qrcode_token);
    if (OPRT_OK != ret)
    {
        PR_ERR("start sdk is error\n");
        return ret;
    }
    XMSDK_SafeSystem("echo \"tuya_ipc_start_sdk end\" >> /var/1.txt; cat /proc/uptime >> /var/1.txt");
    INFO_PRINTF();

#if 0
    if (ap_mode_on_off == 1)
    {
        //TODO pthread attr set
        int op_ret = pthread_create(&s_ipc_sdk_run_handler.mqtt_status_change_handle,NULL, tuya_ipc_ap_mode_start_proc, NULL);
        if(op_ret < 0)
        {
            PR_ERR("create tuya_ipc_sdk_mqtt_online_proc  thread is error\n");
            return -1;
        }
    }
#endif
    g_SDKBufferInitOk = 1;
    s_ipc_sdk_started = true;
    
    
    PR_DEBUG("tuya ipc sdk start is complete\n");
    return ret;
}