diff --git a/bsp/stm32/stm32f103-blue-pill/applications/SConscript b/bsp/stm32/stm32f103-blue-pill/applications/SConscript index d6acfac79f4482aa9948e13b3e5f2d02f3edd96e..9bb9abae897a67a82e373e0aac77bf847dafe1a6 100644 --- a/bsp/stm32/stm32f103-blue-pill/applications/SConscript +++ b/bsp/stm32/stm32f103-blue-pill/applications/SConscript @@ -8,9 +8,8 @@ CPPPATH = [cwd] group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) - if os.path.isfile(os.path.join(path, 'SConscript')): - group = group + SConscript(os.path.join(d, 'SConscript')) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) Return('group') diff --git a/bsp/stm32/stm32f407-atk-explorer/applications/SConscript b/bsp/stm32/stm32f407-atk-explorer/applications/SConscript index 64381a167927ef244a56a252014806bf5af3f0ce..1eaad937dd676fbeb19b534e72b2b7b258f06662 100644 --- a/bsp/stm32/stm32f407-atk-explorer/applications/SConscript +++ b/bsp/stm32/stm32f407-atk-explorer/applications/SConscript @@ -8,9 +8,8 @@ src = Glob('*.c') group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) - if os.path.isfile(os.path.join(path, 'SConscript')): - group = group + SConscript(os.path.join(d, 'SConscript')) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) Return('group') diff --git a/bsp/stm32/stm32l475-atk-pandora/applications/SConscript b/bsp/stm32/stm32l475-atk-pandora/applications/SConscript index e87f545100c06bc9f3ce839fdbd7329788cb0e01..5335ab9bb71f0b911d12709945a248d5bc244a0b 100644 --- a/bsp/stm32/stm32l475-atk-pandora/applications/SConscript +++ b/bsp/stm32/stm32l475-atk-pandora/applications/SConscript @@ -7,20 +7,16 @@ src = Split(''' main.c ''') -if GetDepend(['BSP_USING_LCD_SAMPLE']): - src += ['lcd_sample.c'] - if GetDepend(['PKG_USING_NRF24L01']): - src += ['nrf24l01_init.c'] + src += Glob('nrf24l01_init.c') CPPPATH = [cwd] group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH) list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) - if os.path.isfile(os.path.join(path, 'SConscript')): - group = group + SConscript(os.path.join(d, 'SConscript')) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) Return('group') diff --git a/bsp/stm32/stm32l475-atk-pandora/applications/lcd_sample.c b/bsp/stm32/stm32l475-atk-pandora/applications/lcd_sample.c deleted file mode 100644 index 54d440f7f34c07df1ccddc5be71b72471992e3ae..0000000000000000000000000000000000000000 --- a/bsp/stm32/stm32l475-atk-pandora/applications/lcd_sample.c +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2006-2021, RT-Thread Development Team - * - * SPDX-License-Identifier: Apache-2.0 - * - * Change Logs: - * Date Author Notes - * 2019-08-28 WillianChan first version - */ - -#include -#include -#include -#include -#include - -static int lcd_sample(void) -{ - /* 清屏 */ - lcd_clear(WHITE); - - /* 显示 RT-Thread logo */ - lcd_show_image(0, 0, 240, 69, image_rttlogo); - - /* 设置背景色和前景色 */ - lcd_set_color(WHITE, BLACK); - - /* 在 LCD 上显示字符 */ - lcd_show_string(10, 69, 16, "Hello, RT-Thread!"); - lcd_show_string(10, 69+16, 24, "RT-Thread"); - lcd_show_string(10, 69+16+24, 32, "RT-Thread"); - - /* 在 LCD 上画线 */ - lcd_draw_line(0, 69+16+24+32, 240, 69+16+24+32); - - /* 在 LCD 上画一个同心圆 */ - lcd_draw_point(120, 194); - for (int i = 0; i < 46; i += 4) - { - lcd_draw_circle(120, 194, i); - } - - return RT_EOK; -} -INIT_APP_EXPORT(lcd_sample); diff --git a/bsp/stm32/stm32l475-atk-pandora/board/Kconfig b/bsp/stm32/stm32l475-atk-pandora/board/Kconfig index 7c3e5645e91075ce7a338b169f2f1576e1fa541a..d71766c5d15f52cc0187b1147cab769bbe21338a 100644 --- a/bsp/stm32/stm32l475-atk-pandora/board/Kconfig +++ b/bsp/stm32/stm32l475-atk-pandora/board/Kconfig @@ -41,6 +41,13 @@ menu "Onboard Peripheral Drivers" depends on BSP_USING_SPI_LCD && !BSP_USING_LVGL default n + config BSP_USING_LCD_QRCODE + bool "Enable LCD to show QRCode" + depends on BSP_USING_SPI_LCD && !BSP_USING_LVGL + select BSP_USING_LCD_SAMPLE + select PKG_USING_QRCODE + default n + config BSP_USING_LVGL bool "Enable LVGL for LCD" select PKG_USING_LVGL diff --git a/bsp/stm32/stm32l475-atk-pandora/board/SConscript b/bsp/stm32/stm32l475-atk-pandora/board/SConscript index 0f09160a9a6b3b8de79b29c7acb51be630dfcd02..29efa41d651a3d07880a800a59b323a676c3ad8f 100644 --- a/bsp/stm32/stm32l475-atk-pandora/board/SConscript +++ b/bsp/stm32/stm32l475-atk-pandora/board/SConscript @@ -12,15 +12,12 @@ board.c CubeMX_Config/Src/stm32l4xx_hal_msp.c ''') -if GetDepend('BSP_USING_KEY'): - src = src + ['ports/drv_key.c'] +if GetDepend(['BSP_USING_KEY']): + src += Glob('ports/drv_key.c') if GetDepend(['BSP_USING_QSPI_FLASH']): src += Glob('ports/drv_qspi_flash.c') -if GetDepend('BSP_USING_SPI_LCD'): - src = src + ['ports/drv_lcd.c'] - if GetDepend(['BSP_USING_SDCARD']): src += Glob('ports/drv_sdcard.c') @@ -39,7 +36,6 @@ if GetDepend(['BSP_USING_STM32_SDIO']): path = [cwd] path += [cwd + '/CubeMX_Config/Inc'] -path += [cwd + '/ports'] if GetDepend(['BSP_USING_AUDIO']): path += [cwd + '/ports/audio'] @@ -56,10 +52,4 @@ elif rtconfig.CROSS_TOOL == 'iar': CPPDEFINES = ['STM32L475xx'] group = DefineGroup('Drivers', src, depend = [''], CPPPATH = path, CPPDEFINES = CPPDEFINES) -list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) - if os.path.isfile(os.path.join(path, 'SConscript')): - group = group + SConscript(os.path.join(d, 'SConscript')) - Return('group') diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/SConscript b/bsp/stm32/stm32l475-atk-pandora/board/ports/SConscript index ca95be14e2b891254901c1c1737c0784d9972abb..3c57bc9c6dbd1a52d9a6bdd1b87d6b461bd11f12 100644 --- a/bsp/stm32/stm32l475-atk-pandora/board/ports/SConscript +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/SConscript @@ -3,8 +3,8 @@ from building import * objs = [] cwd = GetCurrentDir() -list = os.listdir(cwd) +list = os.listdir(cwd) for item in list: if os.path.isfile(os.path.join(cwd, item, 'SConscript')): objs = objs + SConscript(os.path.join(item, 'SConscript')) diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/SConscript b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/SConscript new file mode 100644 index 0000000000000000000000000000000000000000..61fd579405b9add218b47a08ac30ba288464e4d9 --- /dev/null +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/SConscript @@ -0,0 +1,16 @@ +from building import * +import os + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +if GetDepend(['BSP_USING_LCD_QRCODE']): + src = src + Glob('lcd_qrcode.c') + +if GetDepend(['BSP_USING_LCD_SAMPLE']): + src = src + Glob('demo/lcd_sample.c') + +group = DefineGroup('Drivers', src, depend = ['BSP_USING_SPI_LCD'], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/demo/lcd_sample.c b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/demo/lcd_sample.c new file mode 100644 index 0000000000000000000000000000000000000000..336a494fcae250502a5e8e3592ca0008974e2eb6 --- /dev/null +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/demo/lcd_sample.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-08-28 WillianChan first version + */ + +#include +#include +#include +#include +#include +#include "rttlogo.h" + +static int lcd_sample(void) +{ + lcd_clear(WHITE); + lcd_show_image(0, 0, 240, 69, image_rttlogo); + lcd_set_color(WHITE, BLACK); + lcd_show_string(10, 69, 24, "Hello, RT-Thread!"); + lcd_draw_line(0, 69+24, 240, 69+24); +#ifdef BSP_USING_LCD_QRCODE + lcd_show_qrcode(54, 69+24+6, 4, ECC_LOW, "https://www.rt-thread.org/", 4); +#endif + return RT_EOK; +} +INIT_APP_EXPORT(lcd_sample); diff --git a/bsp/stm32/stm32l475-atk-pandora/applications/rttlogo.h b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/demo/rttlogo.h similarity index 100% rename from bsp/stm32/stm32l475-atk-pandora/applications/rttlogo.h rename to bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/demo/rttlogo.h diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.c b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd.c similarity index 80% rename from bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.c rename to bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd.c index 7a48c7e7e6443a68cfce84ff1f9a50cb745b5ae7..b74461c1731a33eed3b6221f90daf3ac1f876651 100644 --- a/bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.c +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd.c @@ -12,10 +12,10 @@ */ #include -#include "drv_spi.h" -#include -#include "drv_lcd_font.h" #include +#include +#include "drv_lcd.h" +#include "drv_lcd_font.h" #define DBG_TAG "drv.lcd" #define DBG_LVL DBG_INFO @@ -885,176 +885,3 @@ rt_err_t lcd_show_image(rt_uint16_t x, rt_uint16_t y, rt_uint16_t length, rt_uin return RT_EOK; } - -#ifdef PKG_USING_QRCODE -QRCode qrcode; - -static rt_uint8_t get_enlargement_factor(rt_uint16_t x, rt_uint16_t y, rt_uint8_t size) -{ - rt_uint8_t enlargement_factor = 1 ; - - if (x + size * 8 <= LCD_W && y + size * 8 <= LCD_H) - { - enlargement_factor = 8; - } - else if (x + size * 4 <= LCD_W &&y + size * 4 <= LCD_H) - { - enlargement_factor = 4; - } - else if (x + size * 2 <= LCD_W && y + size * 2 <= LCD_H) - { - enlargement_factor = 2; - } - - return enlargement_factor; -} - -static void show_qrcode_by_point(rt_uint16_t x, rt_uint16_t y, rt_uint8_t size, rt_uint8_t enlargement_factor) -{ - rt_uint32_t width = 0, high = 0; - for (high = 0; high < size; high++) - { - for (width = 0; width < size; width++) - { - if (qrcode_getModule(&qrcode, width, high)) - { - /* magnify pixel */ - for (rt_uint32_t offset_y = 0; offset_y < enlargement_factor; offset_y++) - { - for (rt_uint32_t offset_x = 0; offset_x < enlargement_factor; offset_x++) - { - lcd_draw_point(x + enlargement_factor * width + offset_x, y + enlargement_factor * high + offset_y); - } - } - } - } - } -} - -static void show_qrcode_by_line(rt_uint16_t x, rt_uint16_t y, rt_uint8_t size, rt_uint8_t enlargement_factor,rt_uint8_t *qrcode_buf) -{ - rt_uint32_t width = 0, high = 0; - for (high = 0; high < qrcode.size; high++) - { - for (width = 0; width < qrcode.size; width++) - { - if (qrcode_getModule(&qrcode, width, high)) - { - /* magnify pixel */ - for (rt_uint32_t offset_y = 0; offset_y < enlargement_factor; offset_y++) - { - for (rt_uint32_t offset_x = 0; offset_x < enlargement_factor; offset_x++) - { - /* save the information of modules */ - qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor)] = FORE_COLOR >> 8; - qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor) + 1] = FORE_COLOR; - } - } - } - else - { - /* magnify pixel */ - for (rt_uint32_t offset_y = 0; offset_y < enlargement_factor; offset_y++) - { - for (rt_uint32_t offset_x = 0; offset_x < enlargement_factor; offset_x++) - { - /* save the information of blank */ - qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor)] = BACK_COLOR >> 8; - qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor) + 1] = BACK_COLOR; - } - } - } - } - /* display a line of qrcode */ - lcd_show_image(x, y + high * enlargement_factor, qrcode.size * enlargement_factor, enlargement_factor, qrcode_buf); - } -} - -/** - * display the qrcode on the lcd. - * size = (4 * version +17) * enlargement - * - * @param x x position - * @param y y position - * @param version version of qrcode - * @param ecc level of error correction - * @param data string - * @param enlargement enlargement_factor - * - * @return 0: display success - * -1: generate qrcode failed -* -5: memory low - */ -rt_err_t lcd_show_qrcode(rt_uint16_t x, rt_uint16_t y, rt_uint8_t version, rt_uint8_t ecc, const char *data, rt_uint8_t enlargement) -{ - RT_ASSERT(data); - - rt_int8_t result = 0; - rt_uint8_t enlargement_factor = 1; - rt_uint8_t *qrcode_buf = RT_NULL; - - if (x + version * 4 + 17 > LCD_W || y + version * 4 + 17 > LCD_H) - { - LOG_E("The qrcode is too big!"); - return -RT_ERROR; - } - - rt_uint8_t *qrcodeBytes = (rt_uint8_t *)rt_calloc(1, qrcode_getBufferSize(version)); - if (qrcodeBytes == RT_NULL) - { - LOG_E("no memory for qrcode!"); - return -RT_ENOMEM; - } - - /* generate qrcode */ - result = qrcode_initText(&qrcode, qrcodeBytes, version, ecc, data); - if (result >= 0) - { - /* set enlargement factor */ - if(enlargement == 0) - { - enlargement_factor = get_enlargement_factor(x, y, qrcode.size); - } - else - { - enlargement_factor = enlargement; - } - - /* malloc memory for quick display of qrcode */ - qrcode_buf = rt_malloc(qrcode.size * 2 * enlargement_factor * enlargement_factor); - if (qrcode_buf == RT_NULL) - { - /* clear lcd */ - lcd_fill(x, y, x + qrcode.size, y + qrcode.size, BACK_COLOR); - - /* draw point to display qrcode */ - show_qrcode_by_point(x, y, qrcode.size, enlargement_factor); - } - else - { - /* quick display of qrcode */ - show_qrcode_by_line(x, y, qrcode.size, enlargement_factor,qrcode_buf); - } - result = RT_EOK; - } - else - { - LOG_E("QRCODE(%s) generate falied(%d)\n", data, result); - result = -RT_ENOMEM; - goto __exit; - } - -__exit: - if (qrcodeBytes) - { - rt_free(qrcodeBytes); - } - - if (qrcode_buf) - { - rt_free(qrcode_buf); - } - - return result; -} -#endif diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.h b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd.h similarity index 93% rename from bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.h rename to bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd.h index 021c010f20953afa8e055ee9e915b10bb487bc80..225c3f42cbb9a4c911af17dbdd166851066eb921 100644 --- a/bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd.h +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd.h @@ -13,6 +13,7 @@ #define __DRV_LCD_H__ #include + #ifdef PKG_USING_QRCODE #include #endif @@ -40,6 +41,8 @@ #define GRAY187 0XBDD7 #define GRAY240 0XF79E +extern rt_uint16_t BACK_COLOR, FORE_COLOR; + void lcd_clear(rt_uint16_t color); void lcd_address_set(rt_uint16_t x1, rt_uint16_t y1, rt_uint16_t x2, rt_uint16_t y2); void lcd_set_color(rt_uint16_t back, rt_uint16_t fore); @@ -54,9 +57,6 @@ void lcd_fill_array(rt_uint16_t x_start, rt_uint16_t y_start, rt_uint16_t x_end, void lcd_show_num(rt_uint16_t x, rt_uint16_t y, rt_uint32_t num, rt_uint8_t len, rt_uint32_t size); rt_err_t lcd_show_string(rt_uint16_t x, rt_uint16_t y, rt_uint32_t size, const char *fmt, ...); rt_err_t lcd_show_image(rt_uint16_t x, rt_uint16_t y, rt_uint16_t length, rt_uint16_t wide, const rt_uint8_t *p); -#ifdef PKG_USING_QRCODE -rt_err_t lcd_show_qrcode(rt_uint16_t x, rt_uint16_t y, rt_uint8_t version, rt_uint8_t ecc, const char *data, rt_uint8_t enlargement); -#endif void lcd_enter_sleep(void); void lcd_exit_sleep(void); diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd_font.h b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd_font.h similarity index 100% rename from bsp/stm32/stm32l475-atk-pandora/board/ports/drv_lcd_font.h rename to bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/drv_lcd_font.h diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/lcd_qrcode.c b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/lcd_qrcode.c new file mode 100644 index 0000000000000000000000000000000000000000..a03eba27ca5fd95ec40ac1524dfac73d24fd1904 --- /dev/null +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/lcd_qrcode.c @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2006-2021, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +#include + +#ifdef BSP_USING_LCD_QRCODE +#include +#include "drv_lcd.h" +#include "lcd_qrcode.h" +#define DBG_TAG "drv.lcd.qrcode" +#define DBG_LVL DBG_INFO +#include + +static QRCode qrcode; + +static rt_uint8_t get_enlargement_factor(rt_uint16_t x, rt_uint16_t y, rt_uint8_t size) +{ + rt_uint8_t enlargement_factor = 1 ; + + if (x + size * 8 <= LCD_W && y + size * 8 <= LCD_H) + { + enlargement_factor = 8; + } + else if (x + size * 4 <= LCD_W &&y + size * 4 <= LCD_H) + { + enlargement_factor = 4; + } + else if (x + size * 2 <= LCD_W && y + size * 2 <= LCD_H) + { + enlargement_factor = 2; + } + + return enlargement_factor; +} + +static void show_qrcode_by_point(rt_uint16_t x, rt_uint16_t y, rt_uint8_t size, rt_uint8_t enlargement_factor) +{ + rt_uint32_t width = 0, high = 0; + for (high = 0; high < size; high++) + { + for (width = 0; width < size; width++) + { + if (qrcode_getModule(&qrcode, width, high)) + { + /* magnify pixel */ + for (rt_uint32_t offset_y = 0; offset_y < enlargement_factor; offset_y++) + { + for (rt_uint32_t offset_x = 0; offset_x < enlargement_factor; offset_x++) + { + lcd_draw_point(x + enlargement_factor * width + offset_x, y + enlargement_factor * high + offset_y); + } + } + } + } + } +} + +static void show_qrcode_by_line(rt_uint16_t x, rt_uint16_t y, rt_uint8_t size, rt_uint8_t enlargement_factor,rt_uint8_t *qrcode_buf) +{ + rt_uint32_t width = 0, high = 0; + for (high = 0; high < qrcode.size; high++) + { + for (width = 0; width < qrcode.size; width++) + { + if (qrcode_getModule(&qrcode, width, high)) + { + /* magnify pixel */ + for (rt_uint32_t offset_y = 0; offset_y < enlargement_factor; offset_y++) + { + for (rt_uint32_t offset_x = 0; offset_x < enlargement_factor; offset_x++) + { + /* save the information of modules */ + qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor)] = FORE_COLOR >> 8; + qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor) + 1] = FORE_COLOR; + } + } + } + else + { + /* magnify pixel */ + for (rt_uint32_t offset_y = 0; offset_y < enlargement_factor; offset_y++) + { + for (rt_uint32_t offset_x = 0; offset_x < enlargement_factor; offset_x++) + { + /* save the information of blank */ + qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor)] = BACK_COLOR >> 8; + qrcode_buf[2 * (enlargement_factor * width + offset_x + offset_y * qrcode.size * enlargement_factor) + 1] = BACK_COLOR; + } + } + } + } + /* display a line of qrcode */ + lcd_show_image(x, y + high * enlargement_factor, qrcode.size * enlargement_factor, enlargement_factor, qrcode_buf); + } +} + +/** + * display the qrcode on the lcd. + * size = (4 * version +17) * enlargement + * + * @param x x position + * @param y y position + * @param version version of qrcode + * @param ecc level of error correction + * @param data string + * @param enlargement enlargement_factor + * + * @return 0: display success + * -1: generate qrcode failed +* -5: memory low + */ +rt_err_t lcd_show_qrcode(rt_uint16_t x, rt_uint16_t y, rt_uint8_t version, rt_uint8_t ecc, const char *data, rt_uint8_t enlargement) +{ + RT_ASSERT(data); + + rt_int8_t result = 0; + rt_uint8_t enlargement_factor = 1; + rt_uint8_t *qrcode_buf = RT_NULL; + + if (x + version * 4 + 17 > LCD_W || y + version * 4 + 17 > LCD_H) + { + LOG_E("The qrcode is too big!"); + return -RT_ERROR; + } + + rt_uint8_t *qrcodeBytes = (rt_uint8_t *)rt_calloc(1, qrcode_getBufferSize(version)); + if (qrcodeBytes == RT_NULL) + { + LOG_E("no memory for qrcode!"); + return -RT_ENOMEM; + } + + /* generate qrcode */ + result = qrcode_initText(&qrcode, qrcodeBytes, version, ecc, data); + if (result >= 0) + { + /* set enlargement factor */ + if(enlargement == 0) + { + enlargement_factor = get_enlargement_factor(x, y, qrcode.size); + } + else + { + enlargement_factor = enlargement; + } + + /* malloc memory for quick display of qrcode */ + qrcode_buf = rt_malloc(qrcode.size * 2 * enlargement_factor * enlargement_factor); + if (qrcode_buf == RT_NULL) + { + /* clear lcd */ + lcd_fill(x, y, x + qrcode.size, y + qrcode.size, BACK_COLOR); + + /* draw point to display qrcode */ + show_qrcode_by_point(x, y, qrcode.size, enlargement_factor); + } + else + { + /* quick display of qrcode */ + show_qrcode_by_line(x, y, qrcode.size, enlargement_factor,qrcode_buf); + } + result = RT_EOK; + } + else + { + LOG_E("QRCODE(%s) generate falied(%d)\n", data, result); + result = -RT_ENOMEM; + goto __exit; + } + +__exit: + if (qrcodeBytes) + { + rt_free(qrcodeBytes); + } + + if (qrcode_buf) + { + rt_free(qrcode_buf); + } + + return result; +} +#endif diff --git a/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/lcd_qrcode.h b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/lcd_qrcode.h new file mode 100644 index 0000000000000000000000000000000000000000..f9a51934040df6084d7e032fdb063552fa74d771 --- /dev/null +++ b/bsp/stm32/stm32l475-atk-pandora/board/ports/lcd/lcd_qrcode.h @@ -0,0 +1,11 @@ +#ifndef __LCD_QRCODE_H__ +#define __LCD_QRCODE_H__ + +#include + +#ifdef PKG_USING_QRCODE +#include +rt_err_t lcd_show_qrcode(rt_uint16_t x, rt_uint16_t y, rt_uint8_t version, rt_uint8_t ecc, const char *data, rt_uint8_t enlargement); +#endif + +#endif diff --git a/components/libc/compilers/common/SConscript b/components/libc/compilers/common/SConscript index b1982aa32931bf582120bb53cc8561b5473584c1..fbdb2f11ec39d3909dc27d092a9ede728d3653dd 100644 --- a/components/libc/compilers/common/SConscript +++ b/components/libc/compilers/common/SConscript @@ -12,7 +12,7 @@ if GetDepend('RT_USING_LIBC'): if GetDepend('RT_USING_POSIX') == False: SrcRemove(src, ['unistd.c', 'delay.c']) elif GetDepend('RT_LIBC_USING_TIME'): - src += ['time.c'] + src += Glob('time.c') if rtconfig.CROSS_TOOL == 'keil': CPPDEFINES = ['__CLK_TCK=RT_TICK_PER_SECOND'] @@ -22,9 +22,8 @@ else: group = DefineGroup('libc', src, depend = [], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) list = os.listdir(cwd) -for d in list: - path = os.path.join(cwd, d) - if os.path.isfile(os.path.join(path, 'SConscript')): - group = group + SConscript(os.path.join(d, 'SConscript')) +for item in list: + if os.path.isfile(os.path.join(cwd, item, 'SConscript')): + group = group + SConscript(os.path.join(item, 'SConscript')) Return('group')