mesh sdk 串口复用方案，解决串口 IO 被复用为其他功能时，产测授权失败问题。
按照如下方案修改后，即可兼容。但要求烧录授权时必须开启 rssi 测试信标，且信标名称设置为 "ty_prod"。此时设备处于未配网状态时上电会开启 产测信标扫描，扫到 "ty_prod" 信标之后，即将串口重新初始化；




tal_ble_rssi_test.c 中 tal_rssi_test_ble_adv_recv 函数中增加 搜索到产测信标后重新初始化 uart：

STATIC UINT8_T test_name[20] = "ty_prod";
STATIC UINT8_T test_name_len = 7;
VOID tal_rssi_test_ble_adv_recv(UINT8_T *adv, UINT8_T adv_len, UINT8_T *mac, int rssi){
    if(0 == tal_rssi_test_en){
        return;
    }

    UINT8_T *name_data;
    UINT8_T name_data_len = 0;

    if(OPRT_OK == tal_util_adv_report_parse(0x09, adv, adv_len, &name_data, &name_data_len)){
//        app_log_dump("scan", name_data, name_data_len);
        if(test_name_len == name_data_len && tkl_system_memcmp(name_data, test_name, name_data_len) == 0){
            STATIC UINT8_T uart_init_flag = 0;
            if(0 == uart_init_flag){
                tal_factory_test_uart_init();
                uart_init_flag = 1;
            }
            ty_rssi_base_test_update_rssi(rssi, TY_PROD_RSSI);
        }
        else if(name_data_len == 7 && 0 == tkl_system_memcmp(name_data, "ty_mdev", 7)){
            ty_rssi_base_test_update_rssi(rssi, TY_MDEV_RSSI);
        }
    }
}



tal_ble_rssi_test.c 新增产测串口初始化函数如下：
STATIC VOID_T tal_uart_irq_rx_cb(TUYA_UART_NUM_E port_num, VOID_T *buff, UINT16_T len)
{
    if(port_num == 0) {
        tal_uart_receive_common_data(buff, len);
    }
}

VOID_T tal_factory_test_uart_init(VOID_T){
    STATIC UINT8_T uart_init_flag = 0;
    if(0 == uart_init_flag){
        tal_uart_deinit(TUYA_UART_NUM_0);
        TAL_UART_CFG_T tal_uart_cfg = {
            .rx_buffer_size = 256,
            .open_mode = 0,
            .base_cfg = {
                .baudrate = 9600,
                .parity = TUYA_UART_PARITY_TYPE_NONE,
                .databits = TUYA_UART_DATA_LEN_8BIT,
                .stopbits = TUYA_UART_STOP_LEN_1BIT,
                .flowctrl = TUYA_UART_FLOWCTRL_NONE,
            }
        };
        
        tal_uart_init(TUYA_UART_NUM_0, &tal_uart_cfg);
        tal_uart_rx_reg_irq_cb(TUYA_UART_NUM_0, tal_uart_irq_rx_cb);
        uart_init_flag = 1;
    }
}


另外 tkl_uart.c 中 tkl_uart_deinit 函数做如下修改：
OPERATE_RET tkl_uart_deinit(TUYA_UART_NUM_E port_id){
    if(TUYA_UART_NUM_0 != port_id){
        return OPRT_NOT_SUPPORTED;
    }
    if(!tkl_uart_is_init) {
        return OPRT_NOT_SUPPORTED;
    }
    dma_chn_irq_enable(FLD_DMA_CHN_UART_RX | FLD_DMA_CHN_UART_TX, 0);
    uart_dma_enable(0, 0);
    uart_reset();
    return OPRT_OK;
}
