二维码或条形码 (Qbcode)

二维码条形码控件可以用来生成或展示二维码和条形码,开发者可以设置二维码控件或者条形码控件的边框、位置和大小属性。生成二维码时, qbcode 控件能处理文本和二进制数据;生成条形码时,则只能处理文本数据。二维码遵循 QR Code Model 2 标准,支持从 1 到 40 的各种规格,支持 4 种纠错等级和 4 种字符编码模式。默认情况下,二维码的纠错等级设置为最高级。对于条形码,它支持 code128 格式。

用法

创建控件

使用 gui_qbcode_create() 函数创建一个二维码或者条形码控件,具体创建的是二维码控件还是条形码控件,由参数 encodeType 决定。 encodeType 枚举类型如下:

typedef enum
{
    QRCODE_ENCODE_TEXT,
    QRCODE_ENCODE_BINARY,
    BARCODE_ENCODE_TEXT,
} T_QBCODE_ENCODE_TYPE;

设置尺寸和边框

使用 gui_qbcode_config() 函数来设置控件的尺寸和边框。

二维码编码注释

二维码的编码数据默认情况下可以超过最大字节数,这时可以将最大版本修改为 15 ,版本的修改可以参照 文档

示例

#include "gui_qbcode.h"
#include "gui_components_init.h"

/* Use the following two macro to checkout qrcode or barcode */
// #define DISPLAY_QRCODE   QRCODE_DISPLAY_IMAGE
// #define DISPLAY_QRCODE   QRCODE_DISPLAY_SECTION
#define DISPLAY_BARCODE  BARCODE_DISPLAY_IMAGE
// #define DISPLAY_BARCODE  BARCODE_DISPLAY_SECTION


#define SCREEN_WIDTH     (int16_t)gui_get_screen_width()
#define SCREEN_HEIGHT    (int16_t)gui_get_screen_height()


static int app_init(void)
{
#ifdef DISPLAY_QRCODE
#define QRCODE_WIDTH     360
#define QRCODE_HEIGHT    360
    char *str = "https://www.realtek.com/";

    gui_qbcode_t *qrcode = gui_qbcode_create(gui_obj_get_root(),
                                             "qrcode",
                                             SCREEN_WIDTH / 2 - QRCODE_WIDTH / 2,
                                             SCREEN_HEIGHT / 2 - QRCODE_HEIGHT / 2,
                                             QRCODE_WIDTH,
                                             QRCODE_HEIGHT,
                                             DISPLAY_QRCODE,
                                             QRCODE_ENCODE_TEXT);

    gui_qbcode_config(qrcode, (uint8_t *)str, strlen(str), 3);
#elif defined(DISPLAY_BARCODE)
#define BARCODE_WIDTH     (143 * 3)
#define BARCODE_HEIGHT    143
#define ENCODED_TYPE     BARCODE_ENCODE_TEXT
    char *str = "1234567890";

    gui_qbcode_t *barcode = gui_qbcode_create(gui_obj_get_root(),
                                              "qrcode",
                                              SCREEN_WIDTH / 2 - BARCODE_WIDTH / 2,
                                              SCREEN_HEIGHT / 2 - BARCODE_HEIGHT / 2,
                                              BARCODE_WIDTH,
                                              BARCODE_HEIGHT,
                                              DISPLAY_BARCODE,
                                              ENCODED_TYPE);

    gui_qbcode_config(barcode, str, strlen(str) + 1, 10);
#endif

    return 0;
}

GUI_INIT_APP_EXPORT(app_init);

二维码

条形码


API

Enums

enum T_QBCODE_ENCODE_TYPE

T_QBCODE_ENCODE_TYPE structure.

Values:

enumerator QRCODE_ENCODE_TEXT
enumerator QRCODE_ENCODE_BINARY
enumerator BARCODE_ENCODE_TEXT
enum T_QBCODE_DISPLAY_TYPE

T_QBCODE_DISPLAY_TYPE structure.

Values:

enumerator QRCODE_DISPLAY_SECTION
enumerator QRCODE_DISPLAY_IMAGE
enumerator BARCODE_DISPLAY_SECTION
enumerator BARCODE_DISPLAY_IMAGE

Functions

gui_qbcode_t *gui_qbcode_create(void *parent, const char *name, int16_t x, int16_t y, int16_t w, int16_t h, T_QBCODE_DISPLAY_TYPE type, T_QBCODE_ENCODE_TYPE encodeType)

Create a qrcode widget.

备注

this function just create a qrcode object, qbcode data and param should be config by gui_qbcode_config() api.

参数:
  • parent – the father widget

  • filename – this qrcode widget’s name.

  • x – the X-axis coordinate relative to parent widget

  • y – the Y-axis coordinate relative to parent widget

  • w – qrcode image display width including border

  • h – qrcode image display height including border

  • type – QRCODE_DISPLAY_SECTION (gui in real-time) or QRCODE_DISPLAY_IMAGE(save in psRAM by default) or BARCODE_DISPLAY_SECTION or BARCODE_DISPLAY_IMAGE.

  • encodeType – QRCODE_ENCODE_TEXT or QRCODE_ENCODE_BINARY or BARCODE_ENCODE_TEXT supported.

返回:

gui_qbcode_t* success, NULL failed.

void gui_qbcode_config(gui_qbcode_t *qbcode, uint8_t *data, uint32_t data_len, uint8_t border_size)

config qbcode data and border param for a qbcode object.

参数:
  • qbcode – a qbcode object pointer.

  • data – input data encoded for qbcode

  • data_len – input data length for encode data

  • border_size – qrode border size, can be 1, 2, 3… by qbcode size, default white color border;

返回:

null

struct gui_qbcode_t

qrcode widget structure

Public Members

gui_obj_t base
int16_t offset_x
int16_t offset_y
uint16_t border_size
float scale_x
float scale_y
void *data
void *image_data
gui_img_t *qbcode_img
T_QBCODE_DISPLAY_TYPE type
T_QBCODE_ENCODE_TYPE encodeType