NB-IoT 设备产测

更新时间:2022-11-24 09:20:26下载pdf

本文介绍 NB-IoT 设备产测。

NB-IoT 产测相关功能开发

NB-IoT 的 OpenCPU SDK 提供了一套完整的产测接口回调,可用于进行 PCBA 产测,具体整机产测的方法,开发者可在应用层自己实现。整体流程举例如下:

  1. 首先注册产测的回调函数。

    tuya_user_api_mf_test_cb_reg(tuya_user_prod_test);
    
  2. 在回调函数中,根据命令字来处理相关的产测事件,例如:指示灯测试、电量测试、按键测试等。

    int tuya_user_prod_test(USHORT_T cmd, UCHAR_T *data, UINT_T len, OUT UCHAR_T *ret_data, OUT USHORT_T *ret_len)
    {
        int ret = -1;
        enter_prod_test = 1;
    
        switch (cmd){
            // LED 灯测试
            case 0x0001:{
                    USER_API_LOGI("user prod test, val:%d", data[0]);
    
                    ret = user_test_led(data[0]);
                    if (ret == 0) {
                        *ret_len = sprintf((char *)ret_data, "%s", "{\"ret\":true}");
                    } else {
                        *ret_len = sprintf((char *)ret_data, "{\"ret\":false}");
                    }
                }
                break;
            
            // 电量检测
            case 0x0030:{
                    float value = 0;
                    ret = user_test_vbat(&data[0], &value);
                    USER_API_LOGD("user_test_vbat, value:%f", value);
                    if (ret == 0) {
                        *ret_len = sprintf((char *)ret_data, "{\"ret\":true,\"type\":\"volt\",\"value\":[%.2f]}", value);
                    } else {
                        *ret_len = sprintf((char *)ret_data, "{\"ret\":false}");
                    }
                }
                break;
            
            // 按键测试
            case 0x0003:{
                    int value = 0;
                    char name[16] = {0};
                    USER_API_LOGD("user_test_key");
                    memset(name, 0x00, sizeof(name));
                    ret = user_test_key(name,&value);
                    if (ret == 0) {
                        *ret_len = sprintf((char *)ret_data, "{\"Name\":\"%s\",\"keyID\":%d}", name, value);
                        charge_test_timer_start();
                    } else {
                        *ret_len = sprintf((char *)ret_data, "{\"ret\":false}");
                    }
                    USER_API_LOGI("ret_data:%s", ret_data);
                }
                break;               
            default:
                USER_API_LOGE("err, unknow cmd:0x%04x", cmd);
                break;
        }
    
        return ret;
    }
    

    其中 cmd 命令字,由涂鸦的产测协议规定,包含各种定义的产测类型。