typedef struct tagUSB_COMMON_COND
{
    DWORD dwSize;
    BYTE  byChannelID;     // 通道号
    BYTE  bySID;           // 场景ID
    BYTE  byRes[6];
} USB_COMMON_COND, *LPUSB_COMMON_COND;

操作的是哪个通道、哪个场景,以及这个条件结构体本身有多大

  • dwSize
    • 结构体大小,给 SDK 做参数校验和版本兼容。
  • byChannelID
    • 指定“对哪个通道操作”。
    • 设成 USB_CHANNEL_IR ,表示红外通道。
  • bySID
    • 场景 ID。
    • 某些功能可能按场景区分配置,不一定每个接口都用得到。
  • byRes[6]
    • 预留字节,通常清零,不用你管。

USB_THERMAL_STREAM_PARAM

  • USB_CONFIG_INPUT_INFO 下发的码流参数
  • USB_CONFIG_OUTPUT_INFO 用来接收查询结果

查询

/* ---- 能力查询 ---- */
void print_capabilities(void)
{
    USB_COMMON_COND cond = {0};
    cond.dwSize = sizeof(cond);
    cond.byChannelID = USB_CHANNEL_IR; //配置红外通道

    /* 查询当前热成像码流参数 */
    USB_THERMAL_STREAM_PARAM tsp = {0};
    tsp.dwSize = sizeof(tsp);

    USB_CONFIG_INPUT_INFO in = {0};
    USB_CONFIG_OUTPUT_INFO out = {0};
    in.lpCondBuffer = &cond;
    in.dwCondBufferSize = sizeof(cond);
    out.lpOutBuffer = &tsp;
    out.dwOutBufferSize = sizeof(tsp);

	if (USB_GetDeviceConfig(g_userId, USB_GET_THERMAL_STREAM_PARAM_CAPABILITIES, &in, &out))
    {
        printf("  cap.dwVideoCodingType=%u (0x%08x)\n",
               (unsigned)cap.dwVideoCodingType, (unsigned)cap.dwVideoCodingType);
        static const char *desc[] = {
            "热成像裸数据", "全屏测温数据", "实时裸数据",
            "热图数据", "热成像实时流", "YUV实时数据",
            "PS封装MJPEG", "全屏测温+YUV实时流", "YUV+裸数据", "YUV+裸数据","仅YUV不含测温头","测温头 + 离线测温信息 + 裸数据 + YUV"
        };
        for (int i = 0; i < 10+1; i++)
            printf("    bit%d=%d %s\n", i,
                   (cap.dwVideoCodingType >> i) & 1, desc[i]);
    }
}