#ifndef WRAPPER_H
#define WRAPPER_H

#ifdef WRAPPER_EXPORTS
#define WRAPPER_API __declspec(dllexport)
#else
#define WRAPPER_API __declspec(dllimport)
#endif

/* ─── 图像参数 ───────────────────────────── */
#define CAM_MAX_WIDTH    1280
#define CAM_MAX_HEIGHT   1024
#define CAM_SCAN_WIDTH   640
#define CAM_SCAN_HEIGHT  512

/* ─── 状态码 ──────────────────────────────── */
#define WRAPPER_OK               0
#define WRAPPER_ERR_DONGLE      -1   /* 加密狗初始化失败 */
#define WRAPPER_ERR_CAMERA      -2   /* 相机初始化失败 */
#define WRAPPER_ERR_CAPTURE     -3   /* 采集失败 */
#define WRAPPER_ERR_DLL_LOAD    -4   /* SDK DLL 加载失败 */
#define WRAPPER_ERR_DLL_FUNC    -5   /* SDK 函数寻址失败 */

#ifdef __cplusplus
extern "C" {
#endif

/**
 * wrapper_ic_open()  - 打开加密狗并验证
 * @return WRAPPER_OK 或错误码
 */
WRAPPER_API int wrapper_ic_open(void);

/**
 * wrapper_ic_close() - 关闭加密狗
 */
WRAPPER_API void wrapper_ic_close(void);

/**
 * wrapper_camera_init() - 初始化双目相机（含传感器启动）
 * @return WRAPPER_OK 或错误码
 */
WRAPPER_API int wrapper_camera_init(void);

/**
 * wrapper_camera_capture() - 同步采集一帧（阻塞）
 * @param left_buf   [out] 左相机灰度图缓冲区 (至少 CAM_MAX_WIDTH * CAM_MAX_HEIGHT 字节)
 * @param right_buf  [out] 右相机灰度图缓冲区 (至少 CAM_MAX_WIDTH * CAM_MAX_HEIGHT 字节)
 * @param out_width  [out] 实际图像宽度
 * @param out_height [out] 实际图像高度
 * @return WRAPPER_OK 或错误码
 *
 * 图像格式：8-bit 灰度，逐行扫描 (row-major)
 * 扫描模式时宽高为 640×512，单帧模式最高 1280×1024
 */
WRAPPER_API int wrapper_camera_capture(
    unsigned char* left_buf,
    unsigned char* right_buf,
    int*           out_width,
    int*           out_height
);

/**
 * wrapper_camera_close() - 关闭相机并释放资源
 */
WRAPPER_API void wrapper_camera_close(void);

#ifdef __cplusplus
}
#endif

#endif /* WRAPPER_H */
