4G_module/include/cmiot/cm_qr.h

90 lines
2.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file cm_qr.h
* @brief 二维码解码接口
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
* @author By lixuelin
* @date 2023/02/10
*
* @defgroup QR
* @ingroup QR
* @{
*/
#ifndef __CM_QR_H__
#define __CM_QR_H__
#define CM_QR_DATA_LEN_MAX 512 /*!< 解析结果数据最大长度 */
/**
* @param [in] param 传入的用户参数
* @param [in] data 二维码解析结果
*/
typedef int (*cm_qr_cb)(void *param, const char *data);
/* 解析参数 */
typedef struct
{
void *data; /*!< 图像数据*/
int width; /*!< 图像宽度*/
int height; /*!< 图像高度*/
int format; /*!< 图像原始格式,需转码为灰阶图像(Y800)*/
void *usrdata; /*!< 扫描线程回调的参数*/
cm_qr_cb callback; /*!< 扫描线程回调*/
} cm_qr_param_t;
/* 图像编码格式 */
typedef enum
{
CM_QR_FMT_UYVY, /*!< UYVY格式图像 */
CM_QR_FMT_Y800, /*!< 灰阶图像 */
CM_QR_FMT_OTHER, /*!< 无效格式 */
} cm_qr_fmt_e;
/* 二维码解析结果码 */
typedef enum
{
CM_QR_RET_SUCCESS, /*!< 解码成功 */
CM_QR_RET_NOT_INIT, /*!< 未初始化 */
CM_QR_RET_CREATE_FAILED, /*!< 解码器创建失败 */
CM_QR_RET_MEMORY_ERR, /*!< RAM剩余最大块空间不够 */
CM_QR_RET_FMT_ERR, /*!< 传入的图像格式错误 */
CM_QR_RET_CONVERT_ERR, /*!< 图像灰阶转换错误 */
CM_QR_RET_SCAN_ERR, /*!< 灰阶图像扫描错误 */
CM_QR_RET_NO_DECODE_DATA, /*!< 解码后 无有效数据 */
} cm_qr_retult_e;
/**
* @brief 解码缓存初始化.
*
* @param [in] width 图像宽度
* @param [in] height 图像高度
* @return 函数执行结果 非0为失败0为成功
*
* @details 需在解码前调用
*/
int cm_qr_convert_init(int width, int height);
/**
* @brief 解码缓存回收.
*
* @return
*
* @details 为避免内存碎片,请尽量减少使用频率
*/
void cm_qr_convert_destroy(void);
/**
* @brief 二维码解码.
*
* @param [in] param 待解析图像的参数信息
* @param [out] data 二维码解析结果
* @param [out] datalen 解析结果数据的长度
*
* @return
* = 0 - 成功
* > 0 - 失败, 返回值为错误码详见cm_qr_retult_e
*
* @details 解码前需保证当前ram的最大块超过480*640字节作为临时调用空间
* 如果是在线程中调用解码接口请至少预留4KB的栈空间。
*/
int32_t cm_qr_scan(cm_qr_param_t *param, char *data, int *datalen);
#endif