diff --git a/.github/workflows/action.yml b/.github/workflows/action.yml index 4f9c514b..437a845d 100644 --- a/.github/workflows/action.yml +++ b/.github/workflows/action.yml @@ -60,6 +60,7 @@ jobs: - {RTT_BSP: "Edgi_Talk_M55_Blink_LED"} - {RTT_BSP: "Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_D"} - {RTT_BSP: "Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_H"} + - {RTT_BSP: "Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen"} - {RTT_BSP: "Edgi_Talk_M55_CoreMark"} - {RTT_BSP: "Edgi_Talk_M33_CDC_Echo"} - {RTT_BSP: "Edgi_Talk_M33_HyperRam"} diff --git a/libraries/Common/board/ports/display_panels/drv_touch.c b/libraries/Common/board/ports/display_panels/drv_touch.c index 01ff746a..061d0e07 100644 --- a/libraries/Common/board/ports/display_panels/drv_touch.c +++ b/libraries/Common/board/ports/display_panels/drv_touch.c @@ -13,7 +13,6 @@ static struct rt_i2c_client ST7102_client; static rt_err_t ST7102_write_reg(struct rt_i2c_client *dev, rt_uint8_t *data, rt_uint8_t len) { struct rt_i2c_msg msgs[2]; - rt_uint8_t buf[2]; msgs[0].addr = dev->client_addr; msgs[0].flags = RT_I2C_WR; @@ -30,15 +29,14 @@ static rt_err_t ST7102_write_reg(struct rt_i2c_client *dev, rt_uint8_t *data, rt } } -static rt_err_t ST7102_read_regs(struct rt_i2c_client *dev, rt_uint8_t *reg, rt_uint8_t *data, rt_uint8_t len) +static rt_err_t ST7102_read_regs(struct rt_i2c_client *dev, const rt_uint8_t *reg, rt_uint8_t reg_len, rt_uint8_t *data, rt_uint8_t len) { struct rt_i2c_msg msgs[2]; - rt_uint8_t buf[2]; msgs[0].addr = dev->client_addr; msgs[0].flags = RT_I2C_WR; - msgs[0].buf = reg; - msgs[0].len = ST7102_REGITER_LEN; + msgs[0].buf = (rt_uint8_t *)reg; + msgs[0].len = reg_len; msgs[1].addr = dev->client_addr; msgs[1].flags = RT_I2C_RD; @@ -59,16 +57,22 @@ static rt_err_t ST7102_get_info(struct rt_i2c_client *dev, struct rt_touch_info { rt_uint8_t Reg_High[2]; rt_uint8_t Reg_Low[2]; + rt_uint8_t reg; - ST7102_read_regs(dev, ST7102_MAX_X_Coord_High, Reg_High, 1); - ST7102_read_regs(dev, ST7102_MAX_X_Coord_Low, Reg_Low, 1); + reg = ST7102_MAX_X_Coord_High; + ST7102_read_regs(dev, ®, 1, Reg_High, 1); + reg = ST7102_MAX_X_Coord_Low; + ST7102_read_regs(dev, ®, 1, Reg_Low, 1); info->range_x = (Reg_High[0] & 0x3F) << 8 | Reg_Low[0]; - ST7102_read_regs(dev, ST7102_MAX_Y_Coord_High, Reg_High, 1); - ST7102_read_regs(dev, ST7102_MAX_Y_Coord_Low, Reg_Low, 1); + reg = ST7102_MAX_Y_Coord_High; + ST7102_read_regs(dev, ®, 1, Reg_High, 1); + reg = ST7102_MAX_Y_Coord_Low; + ST7102_read_regs(dev, ®, 1, Reg_Low, 1); info->range_y = (Reg_High[0] & 0x3F) << 8 | Reg_Low[0]; - ST7102_read_regs(dev, ST7102_MAX_Touches, Reg_Low, 1); + reg = ST7102_MAX_Touches; + ST7102_read_regs(dev, ®, 1, Reg_Low, 1); info->point_num = Reg_Low[0]; return RT_EOK; @@ -163,7 +167,7 @@ static rt_size_t ST7102_read_point(struct rt_touch_device *touch, void *buf, rt_ cmd[0] = (rt_uint8_t)((ST7102_Read_Start_Position >> 8) & 0xFF); cmd[1] = (rt_uint8_t)(ST7102_Read_Start_Position & 0xFF); - if (ST7102_read_regs(&ST7102_client, cmd, read_buf, 8 * ST7102_MAX_TOUCH) != RT_EOK) + if (ST7102_read_regs(&ST7102_client, cmd, 2, read_buf, 8 * ST7102_MAX_TOUCH) != RT_EOK) { LOG_D("read point failed\n"); read_num = 0; diff --git a/libraries/HAL_Drivers/drv_lcd.c b/libraries/HAL_Drivers/drv_lcd.c index cf2ecf10..7ccd313b 100644 --- a/libraries/HAL_Drivers/drv_lcd.c +++ b/libraries/HAL_Drivers/drv_lcd.c @@ -36,11 +36,11 @@ #define LCD_WIDTH 512 #define LCD_HEIGHT 800 +#define LCD_STRIDE 512 #define LCD_BITS_PER_PIXEL 16 -#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8) +#define LCD_BUF_SIZE (LCD_STRIDE * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8) #define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565 #define LCD_DEVICE(dev) (struct drv_lcd_device*)(dev) -#define RESET_VAL 0U #define GPU_TESSELLATION_BUFFER_SIZE ((LCD_WIDTH) * 128U) #define APP_BUFFER_COUNT (2U) #define DEFAULT_GPU_CMD_BUFFER_SIZE ((64U) * (512)) @@ -76,9 +76,7 @@ struct drv_lcd_device static rt_err_t drv_lcd_init(struct rt_device *device) { - struct drv_lcd_device *lcd = LCD_DEVICE(device); - /* nothing, right now */ - lcd = lcd; + (void)device; return RT_EOK; } @@ -90,6 +88,53 @@ static rt_err_t drv_lcd_control(struct rt_device *device, int cmd, void *args) { case RTGRAPHIC_CTRL_RECT_UPDATE: { + struct rt_device_rect_info *info = (struct rt_device_rect_info *)args; + uint32_t start_line = 0U; + uint32_t end_line = lcd->lcd_info.height; + rt_bool_t try_partial = RT_FALSE; + + if (info != RT_NULL) + { + if ((info->width == 0U) || (info->height == 0U)) + { + return RT_EOK; + } + if ((info->x >= lcd->lcd_info.width) || (info->y >= lcd->lcd_info.height)) + { + return RT_EOK; + } + if ((info->x + info->width) > lcd->lcd_info.width) + { + info->width = lcd->lcd_info.width - info->x; + } + if ((info->y + info->height) > lcd->lcd_info.height) + { + info->height = lcd->lcd_info.height - info->y; + } + + start_line = info->y; + end_line = info->y + info->height; + if ((info->x == 0U) && (info->width == lcd->lcd_info.width)) + { + try_partial = RT_TRUE; + } + } + + if (try_partial && + ((lcd_gfx_context.dc_context.display_type == GFX_DISP_TYPE_DBI_A) || + (lcd_gfx_context.dc_context.display_type == GFX_DISP_TYPE_DBI_B) || + (lcd_gfx_context.dc_context.display_type == GFX_DISP_TYPE_DBI_C) || + (lcd_gfx_context.dc_context.display_type == GFX_DISP_TYPE_DSI_DBI))) + { + status = Cy_GFXSS_TransferPartialFrame(gfxbase, start_line, end_line, &lcd_gfx_context); + if (CY_GFX_SUCCESS != status) + { + LOG_E("[%s: %d] Partial frame transfer failed. Error type: %u\r\n", __func__, __LINE__, status); + CY_ASSERT(0); + } + break; + } + /* update */ /* Set the frame buffer with the image pointer to be displayed on LCD */ status = Cy_GFXSS_Set_FrameBuffer(gfxbase, (uint32_t*)graphics_buffer, &lcd_gfx_context); @@ -111,9 +156,11 @@ static rt_err_t drv_lcd_control(struct rt_device *device, int cmd, void *args) RT_ASSERT(info != RT_NULL); info->pixel_format = lcd->lcd_info.pixel_format; info->bits_per_pixel = 16; + info->pitch = lcd->lcd_info.pitch; info->width = lcd->lcd_info.width; info->height = lcd->lcd_info.height; info->framebuffer = lcd->lcd_info.framebuffer; + info->smem_len = lcd->lcd_info.smem_len; } break; } @@ -148,6 +195,7 @@ static void dc_irq_handler(void) { rt_interrupt_enter(); Cy_GFXSS_Clear_DC_Interrupt(gfxbase, &lcd_gfx_context); + rt_sem_release(&_lcd.lcd_lock); rt_interrupt_leave(); } @@ -251,6 +299,8 @@ int drv_lcd_hw_init(void) _lcd.lcd_info.width = LCD_WIDTH; _lcd.lcd_info.bits_per_pixel = LCD_BITS_PER_PIXEL; _lcd.lcd_info.pixel_format = LCD_PIXEL_FORMAT; + _lcd.lcd_info.pitch = LCD_STRIDE * (LCD_BITS_PER_PIXEL / 8); + _lcd.lcd_info.smem_len = LCD_BUF_SIZE; /* malloc memory for Triple Buffering */ // _lcd.front_buf=_lcd.lcd_info.framebuffer = rt_malloc_align(LCD_BUF_SIZE, 32); @@ -264,7 +314,7 @@ int drv_lcd_hw_init(void) goto __exit; } /* memset buff to 0xFF */ - memset(_lcd.lcd_info.framebuffer, 0xFF, LCD_BUF_SIZE); + memset(_lcd.lcd_info.framebuffer, 0x00, LCD_BUF_SIZE); device->type = RT_Device_Class_Graphic; #ifdef RT_USING_DEVICE_OPS device->ops = &lcd_ops; diff --git a/libraries/M55_Config/Kconfig b/libraries/M55_Config/Kconfig index b7bd0ab5..c7790bb3 100644 --- a/libraries/M55_Config/Kconfig +++ b/libraries/M55_Config/Kconfig @@ -199,6 +199,8 @@ menu "On-chip Peripheral Drivers" select RT_USING_LCD select RT_USING_TOUCH select RT_TOUCH_PIN_IRQ + select BSP_USING_I2C + select BSP_USING_SOFT_I2C1 default n if BSP_USING_LCD config COMPONENT_MTB_DISPLAY_tl043wvv02 diff --git a/libraries/components/CherryUSB-1.6.0/Kconfig.rtt b/libraries/components/CherryUSB-1.6.0/Kconfig.rtt index 769bfb95..6cc2f042 100644 --- a/libraries/components/CherryUSB-1.6.0/Kconfig.rtt +++ b/libraries/components/CherryUSB-1.6.0/Kconfig.rtt @@ -139,6 +139,11 @@ if RT_USING_CHERRYUSB prompt "Enable usb dfu device" default n + config RT_CHERRYUSB_DEVICE_DISPLAY + bool + prompt "Enable usb display device" + default n + config RT_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV bool prompt "Enable chardev for cdc acm device" @@ -243,6 +248,10 @@ if RT_USING_CHERRYUSB bool prompt "webusb_hid" depends on RT_CHERRYUSB_DEVICE_HID + config RT_CHERRYUSB_DEVICE_TEMPLATE_DISPLAY + bool + prompt "display" + depends on RT_CHERRYUSB_DEVICE_DISPLAY config RT_CHERRYUSB_DEVICE_TEMPLATE_ADB bool prompt "adb" diff --git a/libraries/components/CherryUSB-1.6.0/SConscript b/libraries/components/CherryUSB-1.6.0/SConscript index 5d4b940a..2529f087 100644 --- a/libraries/components/CherryUSB-1.6.0/SConscript +++ b/libraries/components/CherryUSB-1.6.0/SConscript @@ -17,6 +17,7 @@ path += [cwd + '/class/dfu'] path += [cwd + '/class/serial'] path += [cwd + '/class/vendor/net'] path += [cwd + '/class/vendor/wifi'] +path += [cwd + '/class/vendor/display'] src = [] LIBS = [] @@ -136,6 +137,11 @@ if GetDepend(['RT_CHERRYUSB_DEVICE']): src += Glob('class/cdc/usbd_cdc_ncm.c') if GetDepend(['RT_CHERRYUSB_DEVICE_DFU']): src += Glob('class/dfu/usbd_dfu.c') + if GetDepend(['RT_CHERRYUSB_DEVICE_DISPLAY']): + path += [cwd + '/third_party/cherrymp'] + src += Glob('class/vendor/display/usbd_display.c') + src += Glob('third_party/cherrymp/chry_mempool.c') + src += Glob('third_party/cherrymp/chry_mempool_osal_rtthread.c') if GetDepend(['RT_CHERRYUSB_DEVICE_ADB']): src += Glob('class/adb/usbd_adb.c') src += Glob('platform/rtthread/usbd_adb_shell.c') diff --git a/libraries/components/CherryUSB-1.6.0/class/vendor/display/usbd_display.c b/libraries/components/CherryUSB-1.6.0/class/vendor/display/usbd_display.c new file mode 100644 index 00000000..442078fd --- /dev/null +++ b/libraries/components/CherryUSB-1.6.0/class/vendor/display/usbd_display.c @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2026, sakumisu + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "usbd_core.h" +#include "usbd_display.h" +#include "chry_mempool.h" + +struct usbd_disp_frame_header { + uint16_t crc16; //payload crc16 + uint8_t type; //raw rgb,yuv,jpg,other + uint8_t cmd; + uint16_t x; //32bit + uint16_t y; + uint16_t width; //32bit + uint16_t height; + uint32_t frame_id : 10; + uint32_t payload_total : 22; //payload max 4MB +} __PACKED; + +struct usbd_display_priv { + struct chry_mempool pool; + struct usbd_endpoint out_ep; + struct usbd_endpoint in_ep; + struct usbd_display_frame *current_frame; +} g_usbd_display; + +int usbd_display_frame_create(struct usbd_display_frame *frame, uint32_t count) +{ + return chry_mempool_create(&g_usbd_display.pool, frame, sizeof(struct usbd_display_frame), count); +} + +struct usbd_display_frame *usbd_display_frame_alloc(void) +{ + return (struct usbd_display_frame *)chry_mempool_alloc(&g_usbd_display.pool); +} + +int usbd_display_frame_free(struct usbd_display_frame *frame) +{ + return chry_mempool_free(&g_usbd_display.pool, (uintptr_t *)frame); +} + +int usbd_display_frame_send(struct usbd_display_frame *frame) +{ + return chry_mempool_send(&g_usbd_display.pool, (uintptr_t *)frame); +} + +int usbd_display_frame_recv(struct usbd_display_frame **frame, uint32_t timeout) +{ + return chry_mempool_recv(&g_usbd_display.pool, (uintptr_t **)frame, timeout); +} + +uint8_t usb_dispay_dummy[512]; +volatile uint32_t usb_display_buf_offset; +volatile bool usb_display_ignore_frame; + +static void display_notify_handler(uint8_t busid, uint8_t event, void *arg) +{ + switch (event) { + case USBD_EVENT_RESET: + break; + case USBD_EVENT_CONFIGURED: + usb_display_buf_offset = 0; + usb_display_ignore_frame = true; + g_usbd_display.current_frame = NULL; + usbd_ep_start_read(busid, g_usbd_display.out_ep.ep_addr, usb_dispay_dummy, usbd_get_ep_mps(0, g_usbd_display.out_ep.ep_addr)); + break; + default: + break; + } +} + +void usbd_display_bulk_out(uint8_t busid, uint8_t ep, uint32_t nbytes) +{ + if (usb_display_ignore_frame) { + // alloc frame for next at the end of current frame + if ((nbytes % usbd_get_ep_mps(0, g_usbd_display.out_ep.ep_addr)) || (nbytes == 0)) { + if (g_usbd_display.current_frame == NULL) { + g_usbd_display.current_frame = usbd_display_frame_alloc(); + if (g_usbd_display.current_frame) { + usb_display_ignore_frame = false; + usb_display_buf_offset = 0; + + goto get_frame; + } else { + goto drop_frame; + } + } else { + usb_display_ignore_frame = false; + usb_display_buf_offset = 0; + + goto get_frame; + } + } else { + goto drop_frame; + } + } else { + struct usbd_disp_frame_header *header = (struct usbd_disp_frame_header *)&g_usbd_display.current_frame->frame_buf[0]; + struct usbd_display_frame *frame; + + if (header->payload_total > g_usbd_display.current_frame->frame_bufsize) { + USB_LOG_ERR("frame overflow, drop it\r\n"); + usb_display_ignore_frame = true; + + goto drop_frame; + } + + usb_display_buf_offset += nbytes; + + if ((nbytes % usbd_get_ep_mps(0, g_usbd_display.out_ep.ep_addr)) || (nbytes == 0)) { + frame = g_usbd_display.current_frame; + g_usbd_display.current_frame = NULL; + + frame->frame_format = header->type; + frame->frame_size = header->payload_total; + usbd_display_frame_send(frame); + + g_usbd_display.current_frame = usbd_display_frame_alloc(); + if (g_usbd_display.current_frame) { + usb_display_ignore_frame = false; + usb_display_buf_offset = 0; + + goto get_frame; + } else { + usb_display_ignore_frame = true; + + goto drop_frame; + } + } else { + goto get_frame; + } + } + return; + +drop_frame: + // drop current frame + usbd_ep_start_read(busid, g_usbd_display.out_ep.ep_addr, usb_dispay_dummy, usbd_get_ep_mps(0, g_usbd_display.out_ep.ep_addr)); + return; +get_frame: + usbd_ep_start_read(busid, g_usbd_display.out_ep.ep_addr, &g_usbd_display.current_frame->frame_buf[usb_display_buf_offset], 16384); + return; +} + +void usbd_display_bulk_in(uint8_t busid, uint8_t ep, uint32_t nbytes) +{ +} + +struct usbd_interface *usbd_display_init_intf(struct usbd_interface *intf, + const uint8_t out_ep, + const uint8_t in_ep, + struct usbd_display_frame *frame, + uint32_t count) +{ + intf->class_interface_handler = NULL; + intf->class_endpoint_handler = NULL; + intf->vendor_handler = NULL; + intf->notify_handler = display_notify_handler; + + g_usbd_display.out_ep.ep_addr = out_ep; + g_usbd_display.out_ep.ep_cb = usbd_display_bulk_out; + g_usbd_display.in_ep.ep_addr = in_ep; + g_usbd_display.in_ep.ep_cb = usbd_display_bulk_in; + usbd_add_endpoint(0, &g_usbd_display.out_ep); + usbd_add_endpoint(0, &g_usbd_display.in_ep); + + for (uint32_t i = 0; i < count; i++) { + USB_ASSERT_MSG(frame[i].frame_bufsize % 16384, "frame_bufsize must be the multiple of 16384"); + } + + usbd_display_frame_create(frame, count); + return intf; +} + +int usbd_display_dequeue(struct usbd_display_frame **frame, uint32_t timeout) +{ + return usbd_display_frame_recv(frame, timeout); +} + +int usbd_display_enqueue(struct usbd_display_frame *frame) +{ + return usbd_display_frame_free(frame); +} diff --git a/libraries/components/CherryUSB-1.6.0/class/vendor/display/usbd_display.h b/libraries/components/CherryUSB-1.6.0/class/vendor/display/usbd_display.h new file mode 100644 index 00000000..9eac9903 --- /dev/null +++ b/libraries/components/CherryUSB-1.6.0/class/vendor/display/usbd_display.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2026, sakumisu + * + * SPDX-License-Identifier: Apache-2.0 + */ +#ifndef USBD_DISPLAY_H +#define USBD_DISPLAY_H + +#define USBD_DISPLAY_TYPE_RGB565 0 +#define USBD_DISPLAY_TYPE_RGB888 1 +#define USBD_DISPLAY_TYPE_YUV420 2 +#define USBD_DISPLAY_TYPE_JPG 3 + +struct usbd_display_frame { + uint8_t *frame_buf; + uint32_t frame_bufsize; + uint32_t frame_format; + uint32_t frame_size; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/* Init display interface driver */ +struct usbd_interface *usbd_display_init_intf(struct usbd_interface *intf, + const uint8_t out_ep, + const uint8_t in_ep, + struct usbd_display_frame *frame, + uint32_t count); + +int usbd_display_dequeue(struct usbd_display_frame **frame, uint32_t timeout); +int usbd_display_enqueue(struct usbd_display_frame *frame); + +#ifdef __cplusplus +} +#endif + +#endif /* USBD_DISPLAY_H */ diff --git a/libraries/components/CherryUSB-1.6.0/third_party/cherrymp/chry_mempool.c b/libraries/components/CherryUSB-1.6.0/third_party/cherrymp/chry_mempool.c index 0f3f26aa..60da247c 100644 --- a/libraries/components/CherryUSB-1.6.0/third_party/cherrymp/chry_mempool.c +++ b/libraries/components/CherryUSB-1.6.0/third_party/cherrymp/chry_mempool.c @@ -145,7 +145,7 @@ int chry_mempool_create(struct chry_mempool *pool, void *block, uint32_t block_s return -1; } - if (pool->block_size % 4) { + if (block_size % 4) { return -1; } @@ -176,9 +176,9 @@ int chry_mempool_create(struct chry_mempool *pool, void *block, uint32_t block_s void chry_mempool_delete(struct chry_mempool *pool) { - chry_mempool_osal_sem_delete(pool->out_sem); __chry_ringbuffer_reset(&pool->in); __chry_ringbuffer_reset(&pool->out); + chry_mempool_osal_sem_delete(pool->out_sem); } uintptr_t *chry_mempool_alloc(struct chry_mempool *pool) diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.config b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.config new file mode 100644 index 00000000..72e12072 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.config @@ -0,0 +1,1248 @@ + +# +# RT-Thread Kernel +# +CONFIG_RT_NAME_MAX=8 +# CONFIG_RT_USING_ARCH_DATA_TYPE is not set +# CONFIG_RT_USING_AMP is not set +# CONFIG_RT_USING_SMP is not set +CONFIG_RT_ALIGN_SIZE=8 +# CONFIG_RT_THREAD_PRIORITY_8 is not set +CONFIG_RT_THREAD_PRIORITY_32=y +# CONFIG_RT_THREAD_PRIORITY_256 is not set +CONFIG_RT_THREAD_PRIORITY_MAX=32 +CONFIG_RT_TICK_PER_SECOND=1000 +CONFIG_RT_USING_OVERFLOW_CHECK=y +CONFIG_RT_USING_HOOK=y +CONFIG_RT_HOOK_USING_FUNC_PTR=y +CONFIG_RT_USING_IDLE_HOOK=y +CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 +CONFIG_IDLE_THREAD_STACK_SIZE=1024 +CONFIG_RT_USING_TIMER_SOFT=y +CONFIG_RT_TIMER_THREAD_PRIO=4 +CONFIG_RT_TIMER_THREAD_STACK_SIZE=512 + +# +# kservice optimization +# +CONFIG_RT_KSERVICE_USING_STDLIB=y +# CONFIG_RT_KSERVICE_USING_STDLIB_MEMORY is not set +# CONFIG_RT_KSERVICE_USING_TINY_SIZE is not set +# CONFIG_RT_USING_TINY_FFS is not set +# CONFIG_RT_KPRINTF_USING_LONGLONG is not set +# end of kservice optimization + +CONFIG_RT_USING_DEBUG=y +CONFIG_RT_DEBUGING_COLOR=y +CONFIG_RT_DEBUGING_CONTEXT=y +# CONFIG_RT_DEBUGING_INIT is not set + +# +# Inter-Thread communication +# +CONFIG_RT_USING_SEMAPHORE=y +CONFIG_RT_USING_MUTEX=y +CONFIG_RT_USING_EVENT=y +CONFIG_RT_USING_MAILBOX=y +CONFIG_RT_USING_MESSAGEQUEUE=y +# CONFIG_RT_USING_MESSAGEQUEUE_PRIORITY is not set +# CONFIG_RT_USING_SIGNALS is not set +# end of Inter-Thread communication + +# +# Memory Management +# +CONFIG_RT_USING_MEMPOOL=y +CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SLAB is not set +CONFIG_RT_USING_MEMHEAP=y +CONFIG_RT_MEMHEAP_FAST_MODE=y +# CONFIG_RT_MEMHEAP_BEST_MODE is not set +# CONFIG_RT_USING_SMALL_MEM_AS_HEAP is not set +CONFIG_RT_USING_MEMHEAP_AS_HEAP=y +CONFIG_RT_USING_MEMHEAP_AUTO_BINDING=y +# CONFIG_RT_USING_SLAB_AS_HEAP is not set +# CONFIG_RT_USING_USERHEAP is not set +# CONFIG_RT_USING_NOHEAP is not set +# CONFIG_RT_USING_MEMTRACE is not set +# CONFIG_RT_USING_HEAP_ISR is not set +CONFIG_RT_USING_HEAP=y +# end of Memory Management + +# +# Kernel Device Object +# +CONFIG_RT_USING_DEVICE=y +# CONFIG_RT_USING_DEVICE_OPS is not set +# CONFIG_RT_USING_DM is not set +# CONFIG_RT_USING_INTERRUPT_INFO is not set +CONFIG_RT_USING_CONSOLE=y +CONFIG_RT_CONSOLEBUF_SIZE=1024 +CONFIG_RT_CONSOLE_DEVICE_NAME="uart2" +# end of Kernel Device Object + +CONFIG_RT_VER_NUM=0x50002 +# CONFIG_RT_USING_STDC_ATOMIC is not set +# end of RT-Thread Kernel + +# +# RT-Thread Components +# +CONFIG_RT_USING_COMPONENTS_INIT=y +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 +# CONFIG_RT_USING_LEGACY is not set +CONFIG_RT_USING_MSH=y +CONFIG_RT_USING_FINSH=y +CONFIG_FINSH_USING_MSH=y +CONFIG_FINSH_THREAD_NAME="tshell" +CONFIG_FINSH_THREAD_PRIORITY=20 +CONFIG_FINSH_THREAD_STACK_SIZE=4096 +CONFIG_FINSH_USING_HISTORY=y +CONFIG_FINSH_HISTORY_LINES=5 +CONFIG_FINSH_USING_SYMTAB=y +CONFIG_FINSH_CMD_SIZE=80 +CONFIG_MSH_USING_BUILT_IN_COMMANDS=y +CONFIG_FINSH_USING_DESCRIPTION=y +# CONFIG_FINSH_ECHO_DISABLE_DEFAULT is not set +# CONFIG_FINSH_USING_AUTH is not set +CONFIG_FINSH_ARG_MAX=10 +CONFIG_FINSH_USING_OPTION_COMPLETION=y + +# +# DFS: device virtual file system +# +# CONFIG_RT_USING_DFS is not set +# end of DFS: device virtual file system + +# CONFIG_RT_USING_FAL is not set + +# +# Device Drivers +# +CONFIG_RT_USING_DEVICE_IPC=y +CONFIG_RT_UNAMED_PIPE_NUMBER=64 +# CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set +CONFIG_RT_USING_SERIAL=y +CONFIG_RT_USING_SERIAL_V1=y +# CONFIG_RT_USING_SERIAL_V2 is not set +# CONFIG_RT_SERIAL_USING_DMA is not set +CONFIG_RT_SERIAL_RB_BUFSZ=128 +# CONFIG_RT_USING_CAN is not set +# CONFIG_RT_USING_HWTIMER is not set +# CONFIG_RT_USING_CPUTIME is not set +CONFIG_RT_USING_I2C=y +# CONFIG_RT_I2C_DEBUG is not set +CONFIG_RT_USING_I2C_BITOPS=y +# CONFIG_RT_I2C_BITOPS_DEBUG is not set +# CONFIG_RT_USING_PHY is not set +CONFIG_RT_USING_PIN=y +# CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set +# CONFIG_RT_USING_NULL is not set +# CONFIG_RT_USING_ZERO is not set +# CONFIG_RT_USING_RANDOM is not set +# CONFIG_RT_USING_PWM is not set +# CONFIG_RT_USING_MTD_NOR is not set +# CONFIG_RT_USING_MTD_NAND is not set +# CONFIG_RT_USING_PM is not set +# CONFIG_RT_USING_FDT is not set +# CONFIG_RT_USING_RTC is not set +# CONFIG_RT_USING_SDIO is not set +# CONFIG_RT_USING_SPI is not set +# CONFIG_RT_USING_WDT is not set +# CONFIG_RT_USING_AUDIO is not set +# CONFIG_RT_USING_SENSOR is not set +CONFIG_RT_USING_TOUCH=y +CONFIG_RT_TOUCH_PIN_IRQ=y +CONFIG_RT_USING_LCD=y +# CONFIG_RT_USING_HWCRYPTO is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set +# CONFIG_RT_USING_INPUT_CAPTURE is not set +# CONFIG_RT_USING_DEV_BUS is not set +# CONFIG_RT_USING_WIFI is not set +# CONFIG_RT_USING_VIRTIO is not set +# CONFIG_RT_USING_KTIME is not set + +# +# Using USB +# +# CONFIG_RT_USING_USB_HOST is not set +# CONFIG_RT_USING_USB_DEVICE is not set +# end of Using USB +# end of Device Drivers + +# +# C/C++ and POSIX layer +# + +# +# ISO-ANSI C layer +# + +# +# Timezone and Daylight Saving Time +# +# CONFIG_RT_LIBC_USING_FULL_TZ_DST is not set +CONFIG_RT_LIBC_USING_LIGHT_TZ_DST=y +CONFIG_RT_LIBC_TZ_DEFAULT_HOUR=8 +CONFIG_RT_LIBC_TZ_DEFAULT_MIN=0 +CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0 +# end of Timezone and Daylight Saving Time +# end of ISO-ANSI C layer + +# +# POSIX (Portable Operating System Interface) layer +# +# CONFIG_RT_USING_POSIX_FS is not set +# CONFIG_RT_USING_POSIX_DELAY is not set +# CONFIG_RT_USING_POSIX_CLOCK is not set +# CONFIG_RT_USING_POSIX_TIMER is not set +# CONFIG_RT_USING_PTHREADS is not set +# CONFIG_RT_USING_MODULE is not set + +# +# Interprocess Communication (IPC) +# +# CONFIG_RT_USING_POSIX_PIPE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_QUEUE is not set +# CONFIG_RT_USING_POSIX_MESSAGE_SEMAPHORE is not set + +# +# Socket is in the 'Network' category +# +# end of Interprocess Communication (IPC) +# end of POSIX (Portable Operating System Interface) layer + +# CONFIG_RT_USING_CPLUSPLUS is not set +# end of C/C++ and POSIX layer + +# +# Network +# +# CONFIG_RT_USING_SAL is not set +# CONFIG_RT_USING_NETDEV is not set +# CONFIG_RT_USING_LWIP is not set +# CONFIG_RT_USING_AT is not set +# end of Network + +# +# Utilities +# +# CONFIG_RT_USING_RYM is not set +# CONFIG_RT_USING_ULOG is not set +# CONFIG_RT_USING_UTEST is not set +# CONFIG_RT_USING_VAR_EXPORT is not set +# CONFIG_RT_USING_RESOURCE_ID is not set +# CONFIG_RT_USING_ADT is not set +# CONFIG_RT_USING_RT_LINK is not set +# end of Utilities + +# CONFIG_RT_USING_VBUS is not set +# end of RT-Thread Components + +# +# RT-Thread Utestcases +# +# CONFIG_RT_USING_UTESTCASES is not set +# end of RT-Thread Utestcases + +# +# RT-Thread online packages +# + +# +# IoT - internet of things +# +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set +# CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set +# CONFIG_PKG_USING_WEBCLIENT is not set +# CONFIG_PKG_USING_WEBNET is not set +# CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set +# CONFIG_PKG_USING_WEBTERMINAL is not set +# CONFIG_PKG_USING_FREEMODBUS is not set +# CONFIG_PKG_USING_NANOPB is not set +# CONFIG_PKG_USING_WIFI_HOST_DRIVER is not set + +# +# Wi-Fi +# + +# +# Marvell WiFi +# +# CONFIG_PKG_USING_WLANMARVELL is not set +# end of Marvell WiFi + +# +# Wiced WiFi +# +# CONFIG_PKG_USING_WLAN_WICED is not set +# end of Wiced WiFi + +# CONFIG_PKG_USING_RW007 is not set + +# +# CYW43012 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43012 is not set +# end of CYW43012 WiFi + +# +# BL808 WiFi +# +# CONFIG_PKG_USING_WLAN_BL808 is not set +# end of BL808 WiFi + +# +# CYW43439 WiFi +# +# CONFIG_PKG_USING_WLAN_CYW43439 is not set +# end of CYW43439 WiFi +# end of Wi-Fi + +# CONFIG_PKG_USING_COAP is not set +# CONFIG_PKG_USING_NOPOLL is not set +# CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set +# CONFIG_PKG_USING_PPP_DEVICE is not set +# CONFIG_PKG_USING_AT_DEVICE is not set +# CONFIG_PKG_USING_ATSRV_SOCKET is not set +# CONFIG_PKG_USING_WIZNET is not set +# CONFIG_PKG_USING_ZB_COORDINATOR is not set + +# +# IoT Cloud +# +# CONFIG_PKG_USING_ONENET is not set +# CONFIG_PKG_USING_GAGENT_CLOUD is not set +# CONFIG_PKG_USING_ALI_IOTKIT is not set +# CONFIG_PKG_USING_AZURE is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set +# CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set +# CONFIG_PKG_USING_IOTSHARP_SDK is not set +# end of IoT Cloud + +# CONFIG_PKG_USING_NIMBLE is not set +# CONFIG_PKG_USING_LLSYNC_SDK_ADAPTER is not set +# CONFIG_PKG_USING_OTA_DOWNLOADER is not set +# CONFIG_PKG_USING_IPMSG is not set +# CONFIG_PKG_USING_LSSDP is not set +# CONFIG_PKG_USING_AIRKISS_OPEN is not set +# CONFIG_PKG_USING_LIBRWS is not set +# CONFIG_PKG_USING_TCPSERVER is not set +# CONFIG_PKG_USING_PROTOBUF_C is not set +# CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set +# CONFIG_PKG_USING_PDULIB is not set +# CONFIG_PKG_USING_BTSTACK is not set +# CONFIG_PKG_USING_BT_CYW43012 is not set +# CONFIG_PKG_USING_CYW43XX is not set +# CONFIG_PKG_USING_LORAWAN_ED_STACK is not set +# CONFIG_PKG_USING_WAYZ_IOTKIT is not set +# CONFIG_PKG_USING_MAVLINK is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_AGILE_MODBUS is not set +# CONFIG_PKG_USING_AGILE_FTP is not set +# CONFIG_PKG_USING_EMBEDDEDPROTO is not set +# CONFIG_PKG_USING_RT_LINK_HW is not set +# CONFIG_PKG_USING_RYANMQTT is not set +# CONFIG_PKG_USING_RYANW5500 is not set +# CONFIG_PKG_USING_LORA_PKT_FWD is not set +# CONFIG_PKG_USING_LORA_GW_DRIVER_LIB is not set +# CONFIG_PKG_USING_LORA_PKT_SNIFFER is not set +# CONFIG_PKG_USING_HM is not set +# CONFIG_PKG_USING_SMALL_MODBUS is not set +# CONFIG_PKG_USING_NET_SERVER is not set +# CONFIG_PKG_USING_ZFTP is not set +# CONFIG_PKG_USING_WOL is not set +# CONFIG_PKG_USING_ZEPHYR_POLLING is not set +# CONFIG_PKG_USING_MATTER_ADAPTATION_LAYER is not set +# CONFIG_PKG_USING_LHC_MODBUS is not set +# CONFIG_PKG_USING_QMODBUS is not set +# end of IoT - internet of things + +# +# security packages +# +# CONFIG_PKG_USING_MBEDTLS is not set +# CONFIG_PKG_USING_LIBSODIUM is not set +# CONFIG_PKG_USING_LIBHYDROGEN is not set +# CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set +# end of security packages + +# +# language packages +# + +# +# JSON: JavaScript Object Notation, a lightweight data-interchange format +# +# CONFIG_PKG_USING_CJSON is not set +# CONFIG_PKG_USING_LJSON is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_RAPIDJSON is not set +# CONFIG_PKG_USING_JSMN is not set +# CONFIG_PKG_USING_AGILE_JSMN is not set +# CONFIG_PKG_USING_PARSON is not set +# end of JSON: JavaScript Object Notation, a lightweight data-interchange format + +# +# XML: Extensible Markup Language +# +# CONFIG_PKG_USING_SIMPLE_XML is not set +# CONFIG_PKG_USING_EZXML is not set +# end of XML: Extensible Markup Language + +# CONFIG_PKG_USING_LUATOS_SOC is not set +# CONFIG_PKG_USING_LUA is not set +# CONFIG_PKG_USING_JERRYSCRIPT is not set +# CONFIG_PKG_USING_MICROPYTHON is not set +# CONFIG_PKG_USING_PIKASCRIPT is not set +# CONFIG_PKG_USING_RTT_RUST is not set +# end of language packages + +# +# multimedia packages +# + +# +# LVGL: powerful and easy-to-use embedded GUI library +# +# CONFIG_PKG_USING_LVGL is not set +# CONFIG_PKG_USING_LV_MUSIC_DEMO is not set +# CONFIG_PKG_USING_GUI_GUIDER_DEMO is not set +# end of LVGL: powerful and easy-to-use embedded GUI library + +# +# u8g2: a monochrome graphic library +# +# CONFIG_PKG_USING_U8G2_OFFICIAL is not set +# CONFIG_PKG_USING_U8G2 is not set +# end of u8g2: a monochrome graphic library + +# CONFIG_PKG_USING_OPENMV is not set +# CONFIG_PKG_USING_MUPDF is not set +# CONFIG_PKG_USING_STEMWIN is not set +# CONFIG_PKG_USING_WAVPLAYER is not set +# CONFIG_PKG_USING_TJPGD is not set +# CONFIG_PKG_USING_PDFGEN is not set +# CONFIG_PKG_USING_HELIX is not set +# CONFIG_PKG_USING_AZUREGUIX is not set +# CONFIG_PKG_USING_TOUCHGFX2RTT is not set +# CONFIG_PKG_USING_NUEMWIN is not set +# CONFIG_PKG_USING_MP3PLAYER is not set +# CONFIG_PKG_USING_TINYJPEG is not set +# CONFIG_PKG_USING_UGUI is not set +# CONFIG_PKG_USING_MCURSES is not set +# CONFIG_PKG_USING_TERMBOX is not set +# CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_QRCODE is not set +# CONFIG_PKG_USING_GUIENGINE is not set +# CONFIG_PKG_USING_3GPP_AMRNB is not set +# end of multimedia packages + +# +# tools packages +# +# CONFIG_PKG_USING_CMBACKTRACE is not set +# CONFIG_PKG_USING_EASYFLASH is not set +# CONFIG_PKG_USING_EASYLOGGER is not set +# CONFIG_PKG_USING_SYSTEMVIEW is not set +# CONFIG_PKG_USING_SEGGER_RTT is not set +# CONFIG_PKG_USING_RTT_AUTO_EXE_CMD is not set +# CONFIG_PKG_USING_RDB is not set +# CONFIG_PKG_USING_ULOG_EASYFLASH is not set +# CONFIG_PKG_USING_LOGMGR is not set +# CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_MEMORYPERF is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set +# CONFIG_PKG_USING_UMCN is not set +# CONFIG_PKG_USING_LWRB2RTT is not set +# CONFIG_PKG_USING_CPU_USAGE is not set +# CONFIG_PKG_USING_GBK2UTF8 is not set +# CONFIG_PKG_USING_VCONSOLE is not set +# CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set +# CONFIG_PKG_USING_LWLOG is not set +# CONFIG_PKG_USING_ANV_TRACE is not set +# CONFIG_PKG_USING_ANV_MEMLEAK is not set +# CONFIG_PKG_USING_ANV_TESTSUIT is not set +# CONFIG_PKG_USING_ANV_BENCH is not set +# CONFIG_PKG_USING_DEVMEM is not set +# CONFIG_PKG_USING_REGEX is not set +# CONFIG_PKG_USING_MEM_SANDBOX is not set +# CONFIG_PKG_USING_SOLAR_TERMS is not set +# CONFIG_PKG_USING_GAN_ZHI is not set +# CONFIG_PKG_USING_FDT is not set +# CONFIG_PKG_USING_CBOX is not set +# CONFIG_PKG_USING_SNOWFLAKE is not set +# CONFIG_PKG_USING_HASH_MATCH is not set +# CONFIG_PKG_USING_ARMV7M_DWT_TOOL is not set +# CONFIG_PKG_USING_VOFA_PLUS is not set +# CONFIG_PKG_USING_ZDEBUG is not set +# end of tools packages + +# +# system packages +# + +# +# enhanced kernel services +# +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set +# end of enhanced kernel services + +# CONFIG_PKG_USING_AUNITY is not set + +# +# acceleration: Assembly language or algorithmic acceleration packages +# +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# end of acceleration: Assembly language or algorithmic acceleration packages + +# +# CMSIS: ARM Cortex-M Microcontroller Software Interface Standard +# +# CONFIG_PKG_USING_CMSIS_5 is not set +# CONFIG_PKG_USING_CMSIS_CORE is not set +# CONFIG_PKG_USING_CMSIS_DSP is not set +# CONFIG_PKG_USING_CMSIS_NN is not set +# CONFIG_PKG_USING_CMSIS_RTOS1 is not set +# CONFIG_PKG_USING_CMSIS_RTOS2 is not set +# end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard + +# +# Micrium: Micrium software products porting for RT-Thread +# +# CONFIG_PKG_USING_UCOSIII_WRAPPER is not set +# CONFIG_PKG_USING_UCOSII_WRAPPER is not set +# CONFIG_PKG_USING_UC_CRC is not set +# CONFIG_PKG_USING_UC_CLK is not set +# CONFIG_PKG_USING_UC_COMMON is not set +# CONFIG_PKG_USING_UC_MODBUS is not set +# end of Micrium: Micrium software products porting for RT-Thread + +# CONFIG_PKG_USING_FREERTOS_WRAPPER is not set +# CONFIG_PKG_USING_LITEOS_SDK is not set +# CONFIG_PKG_USING_TZ_DATABASE is not set +# CONFIG_PKG_USING_CAIRO is not set +# CONFIG_PKG_USING_PIXMAN is not set +# CONFIG_PKG_USING_PARTITION is not set +# CONFIG_PKG_USING_PERF_COUNTER is not set +# CONFIG_PKG_USING_FILEX is not set +# CONFIG_PKG_USING_LEVELX is not set +# CONFIG_PKG_USING_FLASHDB is not set +# CONFIG_PKG_USING_SQLITE is not set +# CONFIG_PKG_USING_RTI is not set +# CONFIG_PKG_USING_DFS_YAFFS is not set +# CONFIG_PKG_USING_LITTLEFS is not set +# CONFIG_PKG_USING_DFS_JFFS2 is not set +# CONFIG_PKG_USING_DFS_UFFS is not set +# CONFIG_PKG_USING_LWEXT4 is not set +# CONFIG_PKG_USING_THREAD_POOL is not set +# CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set +# CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set +# CONFIG_PKG_USING_RPMSG_LITE is not set +# CONFIG_PKG_USING_LPM is not set +# CONFIG_PKG_USING_TLSF is not set +# CONFIG_PKG_USING_EVENT_RECORDER is not set +# CONFIG_PKG_USING_ARM_2D is not set +# CONFIG_PKG_USING_MCUBOOT is not set +# CONFIG_PKG_USING_TINYUSB is not set +# CONFIG_PKG_USING_CHERRYUSB is not set +# CONFIG_PKG_USING_KMULTI_RTIMER is not set +# CONFIG_PKG_USING_TFDB is not set +# CONFIG_PKG_USING_QPC is not set +# CONFIG_PKG_USING_AGILE_UPGRADE is not set +# CONFIG_PKG_USING_FLASH_BLOB is not set +# CONFIG_PKG_USING_MLIBC is not set +# CONFIG_PKG_USING_TASK_MSG_BUS is not set +# CONFIG_PKG_USING_SFDB is not set +# CONFIG_PKG_USING_RTP is not set +# CONFIG_PKG_USING_REB is not set +# CONFIG_PKG_USING_R_RHEALSTONE is not set +# end of system packages + +# +# peripheral libraries and drivers +# + +# +# HAL & SDK Drivers +# + +# +# STM32 HAL & SDK Drivers +# +# CONFIG_PKG_USING_STM32L4_HAL_DRIVER is not set +# CONFIG_PKG_USING_STM32L4_CMSIS_DRIVER is not set +# CONFIG_PKG_USING_STM32WB55_SDK is not set +# CONFIG_PKG_USING_STM32_SDIO is not set +# end of STM32 HAL & SDK Drivers + +# +# Infineon HAL Packages +# +# CONFIG_PKG_USING_INFINEON_CAT1CM0P is not set +# CONFIG_PKG_USING_INFINEON_CMSIS is not set +# CONFIG_PKG_USING_INFINEON_CORE_LIB is not set +# CONFIG_PKG_USING_INFINEON_MTB_HAL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_MTB_PDL_CAT1 is not set +# CONFIG_PKG_USING_INFINEON_RETARGET_IO is not set +# CONFIG_PKG_USING_INFINEON_CAPSENSE is not set +# CONFIG_PKG_USING_INFINEON_CSDIDAC is not set +# CONFIG_PKG_USING_INFINEON_SERIAL_FLASH is not set +# CONFIG_PKG_USING_INFINEON_USBDEV is not set +# end of Infineon HAL Packages + +# CONFIG_PKG_USING_BLUETRUM_SDK is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_ESP_IDF is not set + +# +# Kendryte SDK +# +# CONFIG_PKG_USING_K210_SDK is not set +# CONFIG_PKG_USING_KENDRYTE_SDK is not set +# end of Kendryte SDK + +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set +# CONFIG_PKG_USING_RASPBERRYPI_PICO_SDK is not set +# end of HAL & SDK Drivers + +# +# sensors drivers +# +# CONFIG_PKG_USING_LSM6DSM is not set +# CONFIG_PKG_USING_LSM6DSL is not set +# CONFIG_PKG_USING_LPS22HB is not set +# CONFIG_PKG_USING_HTS221 is not set +# CONFIG_PKG_USING_LSM303AGR is not set +# CONFIG_PKG_USING_BME280 is not set +# CONFIG_PKG_USING_BME680 is not set +# CONFIG_PKG_USING_BMA400 is not set +# CONFIG_PKG_USING_BMI160_BMX160 is not set +# CONFIG_PKG_USING_SPL0601 is not set +# CONFIG_PKG_USING_MS5805 is not set +# CONFIG_PKG_USING_DA270 is not set +# CONFIG_PKG_USING_DF220 is not set +# CONFIG_PKG_USING_HSHCAL001 is not set +# CONFIG_PKG_USING_BH1750 is not set +# CONFIG_PKG_USING_MPU6XXX is not set +# CONFIG_PKG_USING_AHT10 is not set +# CONFIG_PKG_USING_AP3216C is not set +# CONFIG_PKG_USING_TSL4531 is not set +# CONFIG_PKG_USING_DS18B20 is not set +# CONFIG_PKG_USING_DHT11 is not set +# CONFIG_PKG_USING_DHTXX is not set +# CONFIG_PKG_USING_GY271 is not set +# CONFIG_PKG_USING_GP2Y10 is not set +# CONFIG_PKG_USING_SGP30 is not set +# CONFIG_PKG_USING_HDC1000 is not set +# CONFIG_PKG_USING_BMP180 is not set +# CONFIG_PKG_USING_BMP280 is not set +# CONFIG_PKG_USING_SHTC1 is not set +# CONFIG_PKG_USING_BMI088 is not set +# CONFIG_PKG_USING_HMC5883 is not set +# CONFIG_PKG_USING_MAX6675 is not set +# CONFIG_PKG_USING_TMP1075 is not set +# CONFIG_PKG_USING_SR04 is not set +# CONFIG_PKG_USING_CCS811 is not set +# CONFIG_PKG_USING_PMSXX is not set +# CONFIG_PKG_USING_RT3020 is not set +# CONFIG_PKG_USING_MLX90632 is not set +# CONFIG_PKG_USING_MLX90393 is not set +# CONFIG_PKG_USING_MLX90392 is not set +# CONFIG_PKG_USING_MLX90397 is not set +# CONFIG_PKG_USING_MS5611 is not set +# CONFIG_PKG_USING_MAX31865 is not set +# CONFIG_PKG_USING_VL53L0X is not set +# CONFIG_PKG_USING_INA260 is not set +# CONFIG_PKG_USING_MAX30102 is not set +# CONFIG_PKG_USING_INA226 is not set +# CONFIG_PKG_USING_LIS2DH12 is not set +# CONFIG_PKG_USING_HS300X is not set +# CONFIG_PKG_USING_ZMOD4410 is not set +# CONFIG_PKG_USING_ISL29035 is not set +# CONFIG_PKG_USING_MMC3680KJ is not set +# CONFIG_PKG_USING_QMP6989 is not set +# CONFIG_PKG_USING_BALANCE is not set +# CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set +# CONFIG_PKG_USING_SHT4X is not set +# CONFIG_PKG_USING_AD7746 is not set +# CONFIG_PKG_USING_ADT74XX is not set +# CONFIG_PKG_USING_MAX17048 is not set +# CONFIG_PKG_USING_AS7341 is not set +# CONFIG_PKG_USING_CW2015 is not set +# CONFIG_PKG_USING_ICM20608 is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_STHS34PF80 is not set +# end of sensors drivers + +# +# touch drivers +# +# CONFIG_PKG_USING_GT9147 is not set +# CONFIG_PKG_USING_GT1151 is not set +# CONFIG_PKG_USING_GT917S is not set +# CONFIG_PKG_USING_GT911 is not set +# CONFIG_PKG_USING_FT6206 is not set +# CONFIG_PKG_USING_FT5426 is not set +# CONFIG_PKG_USING_FT6236 is not set +# CONFIG_PKG_USING_XPT2046_TOUCH is not set +# CONFIG_PKG_USING_CST816X is not set +# CONFIG_PKG_USING_CST812T is not set +# end of touch drivers + +# CONFIG_PKG_USING_REALTEK_AMEBA is not set +# CONFIG_PKG_USING_BUTTON is not set +# CONFIG_PKG_USING_PCF8574 is not set +# CONFIG_PKG_USING_SX12XX is not set +# CONFIG_PKG_USING_SIGNAL_LED is not set +# CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_INFRARED is not set +# CONFIG_PKG_USING_MULTI_INFRARED is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set +# CONFIG_PKG_USING_AT24CXX is not set +# CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set +# CONFIG_PKG_USING_PCA9685 is not set +# CONFIG_PKG_USING_ILI9341 is not set +# CONFIG_PKG_USING_I2C_TOOLS is not set +# CONFIG_PKG_USING_NRF24L01 is not set +# CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set +# CONFIG_PKG_USING_LD3320 is not set +# CONFIG_PKG_USING_WK2124 is not set +# CONFIG_PKG_USING_LY68L6400 is not set +# CONFIG_PKG_USING_DM9051 is not set +# CONFIG_PKG_USING_SSD1306 is not set +# CONFIG_PKG_USING_QKEY is not set +# CONFIG_PKG_USING_RS485 is not set +# CONFIG_PKG_USING_RS232 is not set +# CONFIG_PKG_USING_NES is not set +# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set +# CONFIG_PKG_USING_VDEVICE is not set +# CONFIG_PKG_USING_SGM706 is not set +# CONFIG_PKG_USING_RDA58XX is not set +# CONFIG_PKG_USING_LIBNFC is not set +# CONFIG_PKG_USING_MFOC is not set +# CONFIG_PKG_USING_TMC51XX is not set +# CONFIG_PKG_USING_TCA9534 is not set +# CONFIG_PKG_USING_KOBUKI is not set +# CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_MICRO_ROS is not set +# CONFIG_PKG_USING_MCP23008 is not set +# CONFIG_PKG_USING_MISAKA_AT24CXX is not set +# CONFIG_PKG_USING_MISAKA_RGB_BLING is not set +# CONFIG_PKG_USING_LORA_MODEM_DRIVER is not set +# CONFIG_PKG_USING_SOFT_SERIAL is not set +# CONFIG_PKG_USING_MB85RS16 is not set +# CONFIG_PKG_USING_RFM300 is not set +# CONFIG_PKG_USING_IO_INPUT_FILTER is not set +# CONFIG_PKG_USING_LRF_NV7LIDAR is not set +# CONFIG_PKG_USING_AIP650 is not set +# CONFIG_PKG_USING_FINGERPRINT is not set +# CONFIG_PKG_USING_BT_ECB02C is not set +# CONFIG_PKG_USING_UAT is not set +# CONFIG_PKG_USING_ST7789 is not set +# CONFIG_PKG_USING_VS1003 is not set +# CONFIG_PKG_USING_X9555 is not set +# CONFIG_PKG_USING_SYSTEM_RUN_LED is not set +# CONFIG_PKG_USING_BT_MX01 is not set +# CONFIG_PKG_USING_RGPOWER is not set +# CONFIG_PKG_USING_SPI_TOOLS is not set +# end of peripheral libraries and drivers + +# +# AI packages +# +# CONFIG_PKG_USING_LIBANN is not set +# CONFIG_PKG_USING_NNOM is not set +# CONFIG_PKG_USING_ONNX_BACKEND is not set +# CONFIG_PKG_USING_ONNX_PARSER is not set +# CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_ELAPACK is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_QUEST is not set +# CONFIG_PKG_USING_NAXOS is not set +# CONFIG_PKG_USING_R_TINYMAIX is not set +# end of AI packages + +# +# Signal Processing and Control Algorithm Packages +# +# CONFIG_PKG_USING_APID is not set +# CONFIG_PKG_USING_FIRE_PID_CURVE is not set +# CONFIG_PKG_USING_QPID is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_DIGITALCTRL is not set +# CONFIG_PKG_USING_KISSFFT is not set +# end of Signal Processing and Control Algorithm Packages + +# +# miscellaneous packages +# + +# +# project laboratory +# +# end of project laboratory + +# +# samples: kernel and components samples +# +# CONFIG_PKG_USING_KERNEL_SAMPLES is not set +# CONFIG_PKG_USING_FILESYSTEM_SAMPLES is not set +# CONFIG_PKG_USING_NETWORK_SAMPLES is not set +# CONFIG_PKG_USING_PERIPHERAL_SAMPLES is not set +# end of samples: kernel and components samples + +# +# entertainment: terminal games and other interesting software packages +# +# CONFIG_PKG_USING_CMATRIX is not set +# CONFIG_PKG_USING_SL is not set +# CONFIG_PKG_USING_CAL is not set +# CONFIG_PKG_USING_ACLOCK is not set +# CONFIG_PKG_USING_THREES is not set +# CONFIG_PKG_USING_2048 is not set +# CONFIG_PKG_USING_SNAKE is not set +# CONFIG_PKG_USING_TETRIS is not set +# CONFIG_PKG_USING_DONUT is not set +# CONFIG_PKG_USING_COWSAY is not set +# CONFIG_PKG_USING_MORSE is not set +# end of entertainment: terminal games and other interesting software packages + +# CONFIG_PKG_USING_LIBCSV is not set +# CONFIG_PKG_USING_OPTPARSE is not set +# CONFIG_PKG_USING_FASTLZ is not set +# CONFIG_PKG_USING_MINILZO is not set +# CONFIG_PKG_USING_QUICKLZ is not set +# CONFIG_PKG_USING_LZMA is not set +# CONFIG_PKG_USING_RALARAM is not set +# CONFIG_PKG_USING_MULTIBUTTON is not set +# CONFIG_PKG_USING_FLEXIBLE_BUTTON is not set +# CONFIG_PKG_USING_CANFESTIVAL is not set +# CONFIG_PKG_USING_ZLIB is not set +# CONFIG_PKG_USING_MINIZIP is not set +# CONFIG_PKG_USING_HEATSHRINK is not set +# CONFIG_PKG_USING_DSTR is not set +# CONFIG_PKG_USING_TINYFRAME is not set +# CONFIG_PKG_USING_KENDRYTE_DEMO is not set +# CONFIG_PKG_USING_UPACKER is not set +# CONFIG_PKG_USING_UPARAM is not set +# CONFIG_PKG_USING_HELLO is not set +# CONFIG_PKG_USING_VI is not set +# CONFIG_PKG_USING_KI is not set +# CONFIG_PKG_USING_ARMv7M_DWT is not set +# CONFIG_PKG_USING_CRCLIB is not set +# CONFIG_PKG_USING_LWGPS is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set +# CONFIG_PKG_USING_DESIGN_PATTERN is not set +# CONFIG_PKG_USING_CONTROLLER is not set +# CONFIG_PKG_USING_PHASE_LOCKED_LOOP is not set +# CONFIG_PKG_USING_MFBD is not set +# CONFIG_PKG_USING_SLCAN2RTT is not set +# CONFIG_PKG_USING_SOEM is not set +# CONFIG_PKG_USING_QPARAM is not set +# CONFIG_PKG_USING_CorevMCU_CLI is not set +# end of miscellaneous packages + +# +# Arduino libraries +# +# CONFIG_PKG_USING_RTDUINO is not set + +# +# Projects and Demos +# +# CONFIG_PKG_USING_ARDUINO_MSGQ_C_CPP_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_SKETCH_LOADER_DEMO is not set +# CONFIG_PKG_USING_ARDUINO_ULTRASOUND_RADAR is not set +# CONFIG_PKG_USING_ARDUINO_NINEINONE_SENSOR_SHIELD is not set +# CONFIG_PKG_USING_ARDUINO_SENSOR_KIT is not set +# CONFIG_PKG_USING_ARDUINO_MATLAB_SUPPORT is not set +# end of Projects and Demos + +# +# Sensors +# +# CONFIG_PKG_USING_ARDUINO_SENSOR_DEVICE_DRIVERS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSOR is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SENSORLAB is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL375 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL53L1X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VL6180X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31855 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31865 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX31856 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX6675 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90614 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS1 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AHTX0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM9DS0 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADT7410 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME680 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9808 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4728 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA219 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR390 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DHT is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM6DS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO055 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MAX1704X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMC56X3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90393 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90395 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ICM20X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DPS310 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTS221 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT4X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADXL343 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS726X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AMG88XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2320 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AM2315 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LTR329_LTR303 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP085_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP183_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BMP3XX is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MS8607 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MLX90640 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MMA8451 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MSA301 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BNO08X_RVC is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS2MDL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303DLH_MAG is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LC709203F is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CAP1188 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_CCS811 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_NAU7802 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS331 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS2X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LPS35HW is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LSM303_ACCEL is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_LIS3DH is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8591 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPL3115A2 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPR121 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPRLS is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MPU6050 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCT2075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PM25AQI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_EMC2101 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXAS21002C is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SCD30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_FXOS8700 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HMC5883_UNIFIED is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP30 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP006 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TLA202X is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCS34725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI7021 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SGP40 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SHTC3 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU21DF is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AS7341 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_HTU31D is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_INA260 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP007_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_L3GD20 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TMP117 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSC2007 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TSL2591_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VCNL4040 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML6075 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_VEML7700 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LIS3DHTR is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DHT is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL335 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ADXL345 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BME280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP280 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_H3LIS331DL is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MMA7660 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TSL2561 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PAJ7620 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VL53L0X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_ITG3200 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT31 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HP20X is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_DRV2605L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BBM150 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HMC5883L is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM303DLH is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_TCS3414CS is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MP503 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_BMP085 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HIGHTEMP is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_VEML6070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SI1145 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_SHT35 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_AT42QT1070 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LSM6DS3 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HDC1000 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_HM3301 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_MCP9600 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LTC2941 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_LDC1612 is not set +# CONFIG_PKG_USING_ARDUINO_CAPACITIVESENSOR is not set +# CONFIG_PKG_USING_ARDUINO_JARZEBSKI_MPU6050 is not set +# end of Sensors + +# +# Display +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_GFX_LIBRARY is not set +# CONFIG_PKG_USING_ARDUINO_U8G2 is not set +# CONFIG_PKG_USING_ARDUINO_TFT_ESPI is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ST7735 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SSD1306 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ILI9341 is not set +# CONFIG_PKG_USING_SEEED_TM1637 is not set +# end of Display + +# +# Timing +# +# CONFIG_PKG_USING_ARDUINO_RTCLIB is not set +# CONFIG_PKG_USING_ARDUINO_MSTIMER2 is not set +# CONFIG_PKG_USING_ARDUINO_TICKER is not set +# CONFIG_PKG_USING_ARDUINO_TASKSCHEDULER is not set +# end of Timing + +# +# Data Processing +# +# CONFIG_PKG_USING_ARDUINO_KALMANFILTER is not set +# CONFIG_PKG_USING_ARDUINO_ARDUINOJSON is not set +# CONFIG_PKG_USING_ARDUINO_TENSORFLOW_LITE_MICRO is not set +# CONFIG_PKG_USING_ARDUINO_RUNNINGMEDIAN is not set +# end of Data Processing + +# +# Data Storage +# + +# +# Communication +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PN532 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI4713 is not set +# end of Communication + +# +# Device Control +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCF8574 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_PCA9685 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TPA2016 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DRV2605 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS1841 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_DS3502 is not set +# CONFIG_PKG_USING_ARDUINO_SEEED_PCF85063TP is not set +# end of Device Control + +# +# Other +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MFRC630 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_SI5351 is not set +# end of Other + +# +# Signal IO +# +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BUSIO is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_TCA8418 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP23017 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_ADS1X15 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_AW9523 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP3008 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_MCP4725 is not set +# CONFIG_PKG_USING_ARDUINO_ADAFRUIT_BD3491FS is not set +# end of Signal IO + +# +# Uncategorized +# +# end of Arduino libraries +# end of RT-Thread online packages + +CONFIG_RT_USING_CHERRYUSB=y +CONFIG_RT_CHERRYUSB_DEVICE=y +# CONFIG_RT_CHERRYUSB_DEVICE_SPEED_FS is not set +CONFIG_RT_CHERRYUSB_DEVICE_SPEED_HS=y +# CONFIG_RT_CHERRYUSB_DEVICE_SPEED_AUTO is not set +# CONFIG_RT_CHERRYUSB_DEVICE_CUSTOM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_FSDEV_ST is not set +# CONFIG_RT_CHERRYUSB_DEVICE_FSDEV_CUSTOM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_ST is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_ESP is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_KENDRYTE is not set +CONFIG_RT_CHERRYUSB_DEVICE_DWC2_INFINEON=y +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_AT is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_HC is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_NATION is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_GD is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DWC2_CUSTOM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_MUSB_ES is not set +# CONFIG_RT_CHERRYUSB_DEVICE_MUSB_SUNXI is not set +# CONFIG_RT_CHERRYUSB_DEVICE_MUSB_BK is not set +# CONFIG_RT_CHERRYUSB_DEVICE_MUSB_SIFLI is not set +# CONFIG_RT_CHERRYUSB_DEVICE_MUSB_CUSTOM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_CHIPIDEA_MCX is not set +# CONFIG_RT_CHERRYUSB_DEVICE_CHIPIDEA_CUSTOM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_KINETIS_MCX is not set +# CONFIG_RT_CHERRYUSB_DEVICE_KINETIS_MM32 is not set +# CONFIG_RT_CHERRYUSB_DEVICE_KINETIS_CUSTOM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_BL is not set +# CONFIG_RT_CHERRYUSB_DEVICE_HPM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_AIC is not set +# CONFIG_RT_CHERRYUSB_DEVICE_RP2040 is not set +# CONFIG_RT_CHERRYUSB_DEVICE_CH32 is not set +# CONFIG_RT_CHERRYUSB_DEVICE_PUSB2 is not set +# CONFIG_RT_CHERRYUSB_DEVICE_NRF5X is not set +CONFIG_RT_CHERRYUSB_DEVICE_CDC_ACM=y +# CONFIG_RT_CHERRYUSB_DEVICE_HID is not set +# CONFIG_RT_CHERRYUSB_DEVICE_MSC is not set +# CONFIG_RT_CHERRYUSB_DEVICE_AUDIO is not set +# CONFIG_RT_CHERRYUSB_DEVICE_VIDEO is not set +# CONFIG_RT_CHERRYUSB_DEVICE_CDC_RNDIS is not set +# CONFIG_RT_CHERRYUSB_DEVICE_CDC_ECM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_CDC_NCM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_MTP is not set +# CONFIG_RT_CHERRYUSB_DEVICE_ADB is not set +# CONFIG_RT_CHERRYUSB_DEVICE_DFU is not set +CONFIG_RT_CHERRYUSB_DEVICE_DISPLAY=y +# CONFIG_RT_CHERRYUSB_DEVICE_CDC_ACM_CHARDEV is not set +CONFIG_CONFIG_USBDEV_REQUEST_BUFFER_LEN=512 +CONFIG_CONFIG_USBDEV_MSC_MAX_BUFSIZE=512 +# CONFIG_CONFIG_USBDEV_RNDIS_USING_LWIP is not set +# CONFIG_CONFIG_USBDEV_CDC_ECM_USING_LWIP is not set +CONFIG_RT_CHERRYUSB_DEVICE_TEMPLATE_NONE=y +# CONFIG_RT_CHERRYUSB_DEVICE_TEMPLATE_CDC_ACM is not set +# CONFIG_RT_CHERRYUSB_DEVICE_TEMPLATE_WINUSBV1 is not set +# CONFIG_RT_CHERRYUSB_DEVICE_TEMPLATE_WINUSBV2 is not set +# CONFIG_RT_CHERRYUSB_DEVICE_TEMPLATE_WINUSBV2_CDC is not set +# CONFIG_RT_CHERRYUSB_DEVICE_TEMPLATE_DISPLAY is not set +# CONFIG_RT_CHERRYUSB_HOST is not set + +# +# Hardware Drivers Config +# +CONFIG_SOC_SERIES_IFX_PSOCE84=y +CONFIG_KIT_PROCE84_EVK_M55=y + +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_USB_TO_UART=y +# CONFIG_BSP_USING_AUDIO is not set +# CONFIG_BSP_USING_AHT20 is not set +# CONFIG_BSP_USING_USB is not set +# CONFIG_BSP_USING_FREERTOS is not set +# CONFIG_BSP_USING_LSM6DS3 is not set +# end of Onboard Peripheral Drivers + +# +# On-chip Peripheral Drivers +# +CONFIG_BSP_USING_GPIO=y +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_ADC is not set +CONFIG_BSP_USING_I2C=y +# CONFIG_BSP_USING_HW_I2C0 is not set +CONFIG_BSP_USING_SOFT_I2C1=y +CONFIG_BSP_SOFT_I2C1_SCL_PIN=25 +CONFIG_BSP_SOFT_I2C1_SDA_PIN=107 +CONFIG_BSP_USING_UART=y +# CONFIG_BSP_USING_UART1 is not set +CONFIG_BSP_USING_UART2=y +# CONFIG_BSP_USING_UART5 is not set +# CONFIG_BSP_USING_RTC is not set +# CONFIG_BSP_USING_HYPERAM is not set +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_TIM is not set +# CONFIG_BSP_USING_WDT is not set +# CONFIG_BSP_USING_SDIO is not set +CONFIG_BSP_USING_LCD=y +CONFIG_COMPONENT_MTB_DISPLAY_tl043wvv02=y +# CONFIG_BSP_USING_FILESYSTEM is not set +# CONFIG_USING_LVGL is not set +# end of On-chip Peripheral Drivers + +# +# Board extended module Drivers +# +# CONFIG_RT_USING_WIFI_HOST_DRIVER is not set +# end of Board extended module Drivers +# end of Hardware Drivers Config diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.cproject b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.cproject new file mode 100644 index 00000000..92f5d084 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.cproject @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.gitignore b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.gitignore new file mode 100644 index 00000000..f5de05e5 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.gitignore @@ -0,0 +1,42 @@ +*.pyc +*.map +*.dblite +*.elf +*.hex +*.axf +*.exe +*.pdb +*.idb +*.ilk +*.old +build +Debug +documentation/html +*~ +*.o +*.obj +*.out +*.bak +*.dep +*.lib +*.i +*.d +.DS_Stor* +.config 3 +.config 4 +.config 5 +Midea-X1 +*.uimg +GPATH +GRTAGS +GTAGS +.vscode +JLinkLog.txt +JLinkSettings.ini +DebugConfig/ +RTE/ +settings/ +*.uvguix* +cconfig.h +!edgeprotecttools.exe +/makefile.targets diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.project b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.project new file mode 100644 index 00000000..6b704721 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.project @@ -0,0 +1,30 @@ + + + project + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + com.cypress.studio.app.cymodusnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + Edgi_Talk_M55_USB_D + + diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/.OpenOCD.Debug.rttlaunch b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/.OpenOCD.Debug.rttlaunch new file mode 100644 index 00000000..5bb288b6 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/.OpenOCD.Debug.rttlaunch @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/.rtmenus b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/.rtmenus new file mode 100644 index 00000000..a38c403a Binary files /dev/null and b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/.rtmenus differ diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/Edgi_Talk_M55_USB_D.OpenOCD.Debug.rttlaunch b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/Edgi_Talk_M55_USB_D.OpenOCD.Debug.rttlaunch new file mode 100644 index 00000000..811f66bd --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/Edgi_Talk_M55_USB_D.OpenOCD.Debug.rttlaunch @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/language.settings.xml b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/language.settings.xml new file mode 100644 index 00000000..1ebe8846 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/language.settings.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/local_temp_storage.prefs b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/local_temp_storage.prefs new file mode 100644 index 00000000..8bce4d5a --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/local_temp_storage.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +temp.toolchain.exec.path=C\:\\RT-ThreadStudio\\repo\\Extract\\ToolChain_Support_Packages\\ARM\\GNU_Tools_for_ARM_Embedded_Processors\\10.2.1/bin diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/projcfg.ini b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/projcfg.ini new file mode 100644 index 00000000..3ea3ff97 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/.settings/projcfg.ini @@ -0,0 +1,20 @@ +#RT-Thread Studio Project Configuration +#Wed Jan 28 14:36:17 CST 2026 +project_type=rt-thread +chip_name=CY8C624ALQI_S2D42 +os_branch=full +example_name= +os_version=latest +selected_rtt_version=latest +cfg_version=v3.0 +board_base_nano_proj=False +is_use_scons_build=True +output_project_path=D\:\\workspace_work\\IFX\\sdk-bsp-psoc_e84-edgi-talk\\projects\\Edgi_Talk_CherryUSB +project_base_bsp=true +hardware_adapter=KitProg3 +project_name=Edgi_Talk_M55_USB +is_base_example_project=True +board_name=psoce84 +device_vendor=Infineon +bsp_version=1.0.0 +bsp_path=repo/Extract/Board_Support_Packages/Infineon/PSOC62-IFX-PROTO-KIT/1.0.0 diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/Kconfig b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/Kconfig new file mode 100644 index 00000000..9f205a8e --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/Kconfig @@ -0,0 +1,34 @@ +mainmenu "RT-Thread Configuration" + +config BSP_DIR + string + option env="BSP_ROOT" + default "." + +config RTT_DIR + string + option env="RTT_ROOT" + default "rt-thread" + +# you can change the RTT_ROOT default "rt-thread" +# example : default "F:/git_repositories/rt-thread" + +config PKGS_DIR + string + option env="PKGS_ROOT" + default "packages" + +config ENV_DIR + string + option env="ENV_ROOT" + default "/" + +config PLATFORM_DIR + string + option env="PLATFORM_DIR" + default "D:/workspace_work/IFX/sdk-bsp-psoc_e84-edgi-talk/projects/Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB/platform" + +source "$RTT_DIR/Kconfig" +source "$PKGS_DIR/Kconfig" +source "$RTT_DIR/../libraries/components/CherryUSB-1.6.0/Kconfig.rtt" +source "$RTT_DIR/../libraries/M55_Config/Kconfig" diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/README.md b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/README.md new file mode 100644 index 00000000..5f6b3ae8 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/README.md @@ -0,0 +1,95 @@ +# Edgi_Talk_M55_USB_D CherryUSB USB Extend Screen Example + +[**中文**](./README_zh.md) | **English** + +## Overview + +This project integrates **CherryUSB** on the **M55 core** of the Edgi-Talk board. It is prepared for **USB device mode**, uses the Infineon **DWC2** IP, and implements a **Windows USB extend screen**. + +## Default Configuration + +* `RT_USING_CHERRYUSB = y` +* `RT_CHERRYUSB_DEVICE = y` +* `RT_CHERRYUSB_DEVICE_SPEED_HS = y` +* `RT_CHERRYUSB_DEVICE_DWC2_INFINEON = y` +* Device template: **none** (user application) +* Display transport: vendor interface with RGB565 frames + +## Build and Flash + +1. Build the project in RT-Thread Studio or with SCons. +2. Flash the firmware via KitProg3 (DAP). +3. Connect the Type-C USB port for device enumeration. + +## Configuration (Switching Modes) + +Open RT-Thread Studio and go to: + +``` +RT-Thread Settings -> USB -> CherryUSB +``` + +* **Device mode**: enable `RT_CHERRYUSB_DEVICE`, select device IP under **CHERRYUSB_DEVICE_IP** (default: `RT_CHERRYUSB_DEVICE_DWC2_INFINEON`). +* **Device classes**: enable class drivers and select a template under **Select usb device template**. + +If an IP/class requires extra parameters, edit: + +* `libraries/Common/board/ports/usb/usb_config.h` + +## Windows IDD Driver + +Windows Indirect Display Driver (IDD) provides a user-mode driver model for monitors that are not connected to a traditional GPU output. + +Reference: https://learn.microsoft.com/windows-hardware/drivers/display/indirect-display-driver-model-overview + +This driver is based on: https://github.com/chuanjinpang/win10_idd_xfz1986_usb_graphic_driver_display + +If you need to modify it, download and rebuild it yourself. + +### How to use + +1. Install `resources\USB_Graphic\xfz1986_usb_graphic_250224_rc_sign.exe`. +2. After installation, a new display appears under Display adapters. + + ![new_screen](figures/new_screen.png) + +### Notes + +* The driver communicates via a vendor interface, supports multiple resolutions and formats, and is controlled by string descriptors. See: https://github.com/chuanjinpang/win10_idd_xfz1986_usb_graphic_driver_display/blob/main/README.md +* The driver supports Windows 10 and Windows 11 only. + +## Startup Sequence + +The M55 core depends on the M33 boot flow. Flash in this order: + +``` ++------------------+ +| Secure M33 | +| (Secure Core) | ++------------------+ + | + v ++------------------+ +| M33 | +| (Non-Secure Core)| ++------------------+ + | + v ++-------------------+ +| M55 | +| (Application Core)| ++-------------------+ +``` + +## Notes + +* This project targets the M55 core in USB device mode. +* For host mode, see [projects/Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_H/README.md](../Edgi_Talk_M55_USB_H/README.md). +* For M33 device mode, see [projects/Edgi_Talk_CherryUSB/Edgi_Talk_M33_USB_D/README.md](../Edgi_Talk_M33_USB_D/README.md). +* If the M55 example does not run, flash **Edgi_Talk_M33_Blink_LED** first. +* Enable CM55 in the M33 project: + + ``` + RT-Thread Settings -> Hardware -> select SOC Multi Core Mode -> Enable CM55 Core + ``` +![config](figures/config.png) \ No newline at end of file diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/README_zh.md b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/README_zh.md new file mode 100644 index 00000000..0f1336ce --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/README_zh.md @@ -0,0 +1,95 @@ +# Edgi_Talk_M55_USB_D CherryUSB USB 拓展屏示例工程 + +**中文** | [**English**](./README.md) + +## 简介 + +本工程在 **Edgi-Talk M55 核心**上集成 **CherryUSB**,默认配置为 **USB 设备模式**,并使用 **Infineon DWC2** IP,实现 **Windows 下 USB 拓展屏幕**。 + +## 默认配置 + +* `RT_USING_CHERRYUSB = y` +* `RT_CHERRYUSB_DEVICE = y` +* `RT_CHERRYUSB_DEVICE_SPEED_HS = y` +* `RT_CHERRYUSB_DEVICE_DWC2_INFINEON = y` +* 设备模板:**none**(由用户自行实现) +* 显示协议:Vendor 接口传输 RGB565 帧 + +## 编译与下载 + +1. 使用 RT-Thread Studio 或 SCons 编译工程。 +2. 通过 KitProg3 (DAP) 下载固件。 +3. 使用 Type-C 接口连接 USB 进行枚举。 + +## 配置方法(切换模式) + +在 RT-Thread Studio 中打开: + +``` +RT-Thread Settings -> USB -> CherryUSB +``` + +* **设备模式**:开启 `RT_CHERRYUSB_DEVICE`,在 **CHERRYUSB_DEVICE_IP** 中选择 IP(默认 `RT_CHERRYUSB_DEVICE_DWC2_INFINEON`)。 +* **设备类模板**:开启对应类驱动后,在 **Select usb device template** 中选择模板。 + +若 IP 或类驱动需要额外参数,请修改: + +* `libraries/Common/board/ports/usb/usb_config.h` + +## Windows IDD 驱动程序 + +Windows 间接显示驱动程序 (IDD) 模型提供简单的用户模式驱动程序模型,以支持未连接到传统 GPU 显示输出的监视器。 + +参考:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/display/indirect-display-driver-model-overview + +本驱动参考自:https://github.com/chuanjinpang/win10_idd_xfz1986_usb_graphic_driver_display + +如需修改,请自行下载后重新编译。 + +### 如何使用 + +1. 安装 `resources\USB_Graphic\xfz1986_usb_graphic_250224_rc_sign.exe` 签名驱动 +2. 安装完毕后,在显示适配器下面出现一个新的显示器,即安装成功 + + ![new_screen](figures/new_screen.png) + +### 注意事项 + +* 该驱动通过 VENDOR 接口与设备进行通信,支持多种分辨率和图片格式,通过接口字符描述符来控制,具体参考:https://github.com/chuanjinpang/win10_idd_xfz1986_usb_graphic_driver_display/blob/main/README.md +* 驱动仅支持 Windows 10 及 Windows 11 系统,其他系统请自行测试。 + +## 启动流程 + +M55 依赖 M33 启动流程,烧录顺序如下: + +``` ++------------------+ +| Secure M33 | +| (安全内核启动) | ++------------------+ + | + v ++------------------+ +| M33 | +| (非安全核启动) | ++------------------+ + | + v ++-------------------+ +| M55 | +| (应用处理器启动) | ++-------------------+ +``` + +## 说明 + +* 本工程面向 M55 核心的 USB 设备模式。 +* 主机模式请参考 [projects/Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_H/README.md](../Edgi_Talk_M55_USB_H/README.md)。 +* M33 设备模式请参考 [projects/Edgi_Talk_CherryUSB/Edgi_Talk_M33_USB_D/README.md](../Edgi_Talk_M33_USB_D/README.md)。 +* 若 M55 工程无法正常运行,建议先编译并烧录 **Edgi_Talk_M33_Blink_LED** 工程。 +* 在 **M33 工程** 中开启 CM55: + + ``` + RT-Thread Settings -> 硬件 -> select SOC Multi Core Mode -> Enable CM55 Core + ``` +![config](figures/config.png) diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/SConscript b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/SConscript new file mode 100644 index 00000000..20f7689c --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/SConscript @@ -0,0 +1,15 @@ +# for module compiling +import os +Import('RTT_ROOT') +from building import * + +cwd = GetCurrentDir() +objs = [] +list = os.listdir(cwd) + +for d in list: + path = os.path.join(cwd, d) + if os.path.isfile(os.path.join(path, 'SConscript')): + objs = objs + SConscript(os.path.join(d, 'SConscript')) + +Return('objs') diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/SConstruct b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/SConstruct new file mode 100644 index 00000000..dfd7328c --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/SConstruct @@ -0,0 +1,142 @@ +import os +import sys +import rtconfig +import platform +import subprocess +import uuid + +if os.path.exists('rt-thread'): + RTT_ROOT = os.path.normpath(os.getcwd() + '/rt-thread') +else: + RTT_ROOT = os.path.normpath(os.getcwd() + '/../../../rt-thread') + +sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')] +try: + from building import * +except Exception as e: + print("Error message:", e) + print('Cannot found RT-Thread root directory, please check RTT_ROOT') + print(RTT_ROOT) + sys.exit(-1) + +TARGET = 'rt-thread.' + rtconfig.TARGET_EXT + +DefaultEnvironment(tools=[]) +env = Environment(tools = ['mingw'], + AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS, + CC = rtconfig.CC, CFLAGS = rtconfig.CFLAGS, + AR = rtconfig.AR, ARFLAGS = '-rc', + CXX = rtconfig.CXX, CXXFLAGS = rtconfig.CXXFLAGS, + LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) +env.PrependENVPath('PATH', rtconfig.EXEC_PATH) +env.AppendUnique(CPPPATH=[os.getcwd()]) + +if rtconfig.PLATFORM in ['iccarm']: + env.Replace(CCCOM = ['$CC $CFLAGS $CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS -o $TARGET $SOURCES']) + env.Replace(ARFLAGS = ['']) + env.Replace(LINKCOM = env["LINKCOM"] + ' --map rt-thread.map') + +Export('RTT_ROOT') +Export('rtconfig') + +SDK_ROOT = os.path.abspath('./') +if os.path.exists(SDK_ROOT + '/libraries/components'): + libraries_path_prefix = SDK_ROOT + '/libraries/components' +else: + libraries_path_prefix = os.path.dirname(SDK_ROOT) + '/../../libraries/components' + +SDK_LIB = libraries_path_prefix +Export('SDK_LIB') + +# prepare building environment +objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) + +IFX_library = 'Packages' +rtconfig.BSP_LIBRARY_TYPE = IFX_library + +# set spawn +def ourspawn(sh, escape, cmd, args, e): + filename = str(uuid.uuid4()) + newargs = ' '.join(args[1:]) + cmdline = cmd + " " + newargs + if (len(cmdline) > 16 * 1024): + f = open(filename, 'w') + f.write(' '.join(args[1:]).replace('\\', '/')) + f.close() + # exec + cmdline = cmd + " @" + filename + proc = subprocess.Popen(cmdline, stdin=subprocess.PIPE, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, shell = False, env = e) + data, err = proc.communicate() + rv = proc.wait() + def res_output(_output, _s): + if len(_s): + if isinstance(_s, str): + _output(_s) + elif isinstance(_s, bytes): + _output(str(_s, 'UTF-8')) + else: + _output(str(_s)) + res_output(sys.stderr.write, err) + res_output(sys.stdout.write, data) + if os.path.isfile(filename): + os.remove(filename) + return rv + +if platform.system() == 'Windows': + env['SPAWN'] = ourspawn + +# Add project libs with VariantDir +if os.path.exists(os.path.join(os.getcwd(), "libs", "SConscript")): + env.VariantDir('build/libs', 'libs', duplicate=0) +else: + env.VariantDir('build/libs', '../../libs', duplicate=0) + objs.extend(SConscript('../../libs/SConscript', variant_dir='build/libs', duplicate=0)) + +if os.path.exists(os.path.join(os.getcwd(), "libraries")): + # Set VariantDir for libraries + env.VariantDir('build/libraries/HAL_Drivers', 'libraries/HAL_Drivers', duplicate=0) + env.VariantDir('build/libraries/components', 'libraries/components', duplicate=0) + env.VariantDir('build/libraries/M55_Config/board', 'libraries/M55_Config/board', duplicate=0) + env.VariantDir('build/libraries/Common/board', 'libraries/Common/board', duplicate=0) + + objs.extend(SConscript('libraries/HAL_Drivers/SConscript', variant_dir='build/libraries/HAL_Drivers', duplicate=0)) + objs.extend(SConscript('libraries/components/Infineon_cmsis-latest/SConscript', variant_dir='build/libraries/components/Infineon_cmsis-latest', duplicate=0)) + objs.extend(SConscript('libraries/components/Infineon_core-lib-latest/SConscript', variant_dir='build/libraries/components/Infineon_core-lib-latest', duplicate=0)) + objs.extend(SConscript('libraries/components/mtb-device-support-pse8xxgp/hal/SConscript', variant_dir='build/libraries/components/mtb-device-support-pse8xxgp/hal', duplicate=0)) + objs.extend(SConscript('libraries/components/mtb-device-support-pse8xxgp/pdl/SConscript', variant_dir='build/libraries/components/mtb-device-support-pse8xxgp/pdl', duplicate=0)) + objs.extend(SConscript('libraries/components/async-transfer/SConscript', variant_dir='build/libraries/components/async-transfer', duplicate=0)) + objs.extend(SConscript('libraries/components/mtb-device-support-pse8xxgp/device-utils/syspm/SConscript', variant_dir='build/libraries/components/mtb-device-support-pse8xxgp/device-utils/syspm', duplicate=0)) + objs.extend(SConscript('libraries/components/serial-memory/SConscript', variant_dir='build/libraries/components/serial-memory', duplicate=0)) + objs.extend(SConscript('libraries/components/Infineon_retarget-io-latest/SConscript', variant_dir='build/libraries/components/Infineon_retarget-io-latest', duplicate=0)) + objs.extend(SConscript('libraries/components/ASRC/SConscript', variant_dir='build/libraries/components/ASRC', duplicate=0)) + objs.extend(SConscript('libraries/components/mtb-srf/SConscript', variant_dir='build/libraries/components/mtb-srf', duplicate=0)) + objs.extend(SConscript('libraries/components/mtb-ipc/SConscript', variant_dir='build/libraries/components/mtb-ipc', duplicate=0)) + objs.extend(SConscript('libraries/components/littlefs/SConscript', variant_dir='build/libraries/components/littlefs', duplicate=0)) + objs.extend(SConscript('libraries/components/SConscript', variant_dir='build/libraries/components', duplicate=0)) + objs.extend(SConscript('libraries/Common/board/SConscript', variant_dir='build/libraries/Common/board', duplicate=0)) +else: + # Set VariantDir for external libraries + env.VariantDir('build/libraries/HAL_Drivers', '../../../libraries/HAL_Drivers', duplicate=0) + env.VariantDir('build/libraries/components', '../../../libraries/components', duplicate=0) + env.VariantDir('build/libraries/M55_Config/board', '../../../libraries/M55_Config/board', duplicate=0) + env.VariantDir('build/libraries/Common/board', '../../../libraries/Common/board', duplicate=0) + + objs.extend(SConscript('../../../libraries/HAL_Drivers/SConscript', variant_dir='build/libraries/HAL_Drivers', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/Infineon_cmsis-latest/SConscript', variant_dir='build/libraries/components/Infineon_cmsis-latest', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/Infineon_core-lib-latest/SConscript', variant_dir='build/libraries/components/Infineon_core-lib-latest', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/mtb-device-support-pse8xxgp/hal/SConscript', variant_dir='build/libraries/components/mtb-device-support-pse8xxgp/hal', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/mtb-device-support-pse8xxgp/pdl/SConscript', variant_dir='build/libraries/components/mtb-device-support-pse8xxgp/pdl', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/async-transfer/SConscript', variant_dir='build/libraries/components/async-transfer', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/mtb-device-support-pse8xxgp/device-utils/syspm/SConscript', variant_dir='build/libraries/components/mtb-device-support-pse8xxgp/device-utils/syspm', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/serial-memory/SConscript', variant_dir='build/libraries/components/serial-memory', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/Infineon_retarget-io-latest/SConscript', variant_dir='build/libraries/components/Infineon_retarget-io-latest', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/ASRC/SConscript', variant_dir='build/libraries/components/ASRC', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/mtb-srf/SConscript', variant_dir='build/libraries/components/mtb-srf', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/mtb-ipc/SConscript', variant_dir='build/libraries/components/mtb-ipc', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/littlefs/SConscript', variant_dir='build/libraries/components/littlefs', duplicate=0)) + objs.extend(SConscript('../../../libraries/components/SConscript', variant_dir='build/libraries/components', duplicate=0)) + objs.extend(SConscript('../../../libraries/Common/board/SConscript', variant_dir='build/libraries/Common/board', duplicate=0)) + +# make a building +DoBuilding(TARGET, objs) diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/SConscript b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/SConscript new file mode 100644 index 00000000..034056ec --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/SConscript @@ -0,0 +1,16 @@ +import rtconfig +from building import * +import os + +cwd = GetCurrentDir() +path = [cwd] +src = Glob('*.c') + +group = DefineGroup('Applications', src, depend = [''], CPPPATH = path) + +list = os.listdir(cwd) +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/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/main.c b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/main.c new file mode 100644 index 00000000..68124cb6 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/main.c @@ -0,0 +1,15 @@ +#include +#include +#include +#include "usb_display.h" + +int main(void) +{ + rt_kprintf("Hello RT-Thread\n"); + rt_kprintf("It's cortex-m55 cherryusb demo\n"); + + usb_display_init(); + + return 0; +} + diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/SConscript b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/SConscript new file mode 100644 index 00000000..aa8ad7be --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/SConscript @@ -0,0 +1,24 @@ +import os +from building import * + +Import('RTT_ROOT') + +cwd = GetCurrentDir() +src = Glob('*.c') + +cherryusb_root = os.path.join(RTT_ROOT, '..', 'libraries', 'components', 'CherryUSB-1.6.0') +common_usb = os.path.join(RTT_ROOT, '..', 'libraries', 'Common', 'board', 'ports', 'usb') + +path = [ + cwd, + cherryusb_root, + os.path.join(cherryusb_root, 'core'), + os.path.join(cherryusb_root, 'common'), + os.path.join(cherryusb_root, 'class', 'vendor', 'display'), + os.path.join(cherryusb_root, 'third_party', 'cherrymp'), + common_usb, +] + +group = DefineGroup('usb_display', src, depend=['RT_USING_CHERRYUSB', 'RT_CHERRYUSB_DEVICE'], CPPPATH=path) + +Return('group') diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/usb_display.c b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/usb_display.c new file mode 100644 index 00000000..60e7155b --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/usb_display.c @@ -0,0 +1,416 @@ +/* + * USB Display application - adapted from CherryUSB demo/display/usbdisplay_template.c + * + * Uses the usbd_display class driver with mempool-based double buffering. + * Receives frames from the Windows xfz1986_usb_graphic driver and renders + * them to the on-board LCD via RT-Thread graphic device. + */ +#include +#include +#include + +#include "usb_display.h" +#include "usb_config.h" +#include "usbd_core.h" +#include "usbd_display.h" + +#define USB_DISPLAY_BUSID 0 + +#ifndef USBHS_BASE +#define USBHS_BASE 0x44900000UL +#endif + +#define DISPLAY_IN_EP 0x81 +#define DISPLAY_OUT_EP 0x02 + +#ifdef CONFIG_USB_HS +#define DISPLAY_EP_MPS 512 +#else +#define DISPLAY_EP_MPS 64 +#endif + +#define USBD_VID 0x303A +#define USBD_PID 0x2987 +#define USBD_MAX_POWER 100 +#define USBD_LANGID_STRING 1033 + +#define USB_CONFIG_SIZE (9 + 9 + 7 + 7) + +#ifndef USB_DISPLAY_LOG_ENABLE +#define USB_DISPLAY_LOG_ENABLE 1 +#endif + +#if USB_DISPLAY_LOG_ENABLE +#define USB_DISPLAY_LOG(...) rt_kprintf(__VA_ARGS__) +#else +#define USB_DISPLAY_LOG(...) +#endif + +/* ---------- Display parameters ---------- */ +#define USB_DISPLAY_MAX_WIDTH 480U +#define USB_DISPLAY_MAX_HEIGHT 800U +#define USB_DISPLAY_FRAME_BYTES (USB_DISPLAY_MAX_WIDTH * USB_DISPLAY_MAX_HEIGHT * 2U) + +/* + * Product string encodes the resolution and format for the Windows driver. + * Format: cherryusb_Rx_E_Fps_Bl + * fmt: rgb16 = RGB565, jpg9 = JPEG + */ +#define USB_DISPLAY_PRODUCT_STRING "cherryusb_R480x800_Ergb16_Fps30_Bl128" + +/* ---------- LCD related ---------- */ +static uint8_t *framebuffer; +static uint32_t framebuffer_size; +static struct rt_device *lcd_dev; +static struct rt_device_graphic_info lcd_info; +static rt_thread_t display_thread; +/** Framebuffer stride in bytes (pitch). */ +static uint32_t fb_stride_bytes; +static uint16_t usb_frame_width; +static uint16_t usb_frame_height; + +static uint32_t gui_frame_count; +static uint32_t gui_frame_count_last; +static rt_tick_t gui_fps_last_tick; + +/* ---------- USB descriptor ---------- */ +static const uint8_t device_descriptor[] = { + USB_DEVICE_DESCRIPTOR_INIT(USB_2_0, 0x00, 0x00, 0x00, USBD_VID, USBD_PID, 0x0101, 0x01) +}; + +static const uint8_t config_descriptor[] = { + USB_CONFIG_DESCRIPTOR_INIT(USB_CONFIG_SIZE, 0x01, 0x01, USB_CONFIG_BUS_POWERED, USBD_MAX_POWER), + USB_INTERFACE_DESCRIPTOR_INIT(0x00, 0x00, 0x02, 0xff, 0x00, 0x00, 0x00), + USB_ENDPOINT_DESCRIPTOR_INIT(DISPLAY_IN_EP, 0x02, DISPLAY_EP_MPS, 0x00), + USB_ENDPOINT_DESCRIPTOR_INIT(DISPLAY_OUT_EP, 0x02, DISPLAY_EP_MPS, 0x00), +}; + +static const uint8_t device_quality_descriptor[] = { + /////////////////////////////////////// + /// device qualifier descriptor + /////////////////////////////////////// + 0x0a, + USB_DESCRIPTOR_TYPE_DEVICE_QUALIFIER, + 0x00, + 0x02, + 0x00, + 0x00, + 0x00, + 0x40, + 0x00, + 0x00, +}; + +static const char *string_descriptors[] = { + (const char[]){ 0x09, 0x04 }, /* Langid */ + "Edgi-talk", /* Manufacturer */ + USB_DISPLAY_PRODUCT_STRING, /* Product - encodes resolution/format */ + "20260210", /* Serial Number */ +}; + +static const uint8_t *device_descriptor_callback(uint8_t speed) +{ + (void)speed; + return device_descriptor; +} + +static const uint8_t *config_descriptor_callback(uint8_t speed) +{ + (void)speed; + return config_descriptor; +} + +static const uint8_t *device_quality_descriptor_callback(uint8_t speed) +{ + (void)speed; +#ifdef CONFIG_USB_HS + return device_quality_descriptor; +#else + return RT_NULL; +#endif +} + +static const char *string_descriptor_callback(uint8_t speed, uint8_t index) +{ + (void)speed; + if (index >= (sizeof(string_descriptors) / sizeof(char *))) + { + return RT_NULL; + } + return string_descriptors[index]; +} + +static const struct usb_descriptor display_descriptor = { + .device_descriptor_callback = device_descriptor_callback, + .config_descriptor_callback = config_descriptor_callback, + .device_quality_descriptor_callback = device_quality_descriptor_callback, + .string_descriptor_callback = string_descriptor_callback +}; + +static void usbd_event_handler(uint8_t busid, uint8_t event) +{ + switch (event) + { + case USBD_EVENT_RESET: + break; + case USBD_EVENT_CONNECTED: + break; + case USBD_EVENT_DISCONNECTED: + break; + case USBD_EVENT_RESUME: + break; + case USBD_EVENT_SUSPEND: + break; + case USBD_EVENT_CONFIGURED: + break; + case USBD_EVENT_SET_REMOTE_WAKEUP: + break; + case USBD_EVENT_CLR_REMOTE_WAKEUP: + break; + default: + break; + } +} + +/* ---------- Frame pool (double buffering) ---------- */ +static struct usbd_interface intf0; +static struct usbd_display_frame frame_pool[2]; + +/* + * Frame buffers placed in GPU memory region for DMA/no-cache access. + * Each buffer is USB_DISPLAY_FRAME_BYTES and must be a multiple of 16384. + * Using gfx_mem (3MB) instead of cy_socmem_data to avoid m55_data_secondary overflow. + */ +CY_SECTION(".cy_usb_display_buf") USB_MEM_ALIGNX +static uint8_t usb_display_buffer[2][USB_DISPLAY_FRAME_BYTES]; + +/* ---------- Frame rendering helpers ---------- */ + +struct usbd_disp_frame_header { + uint16_t crc16; + uint8_t type; + uint8_t cmd; + uint16_t x; + uint16_t y; + uint16_t width; + uint16_t height; + uint32_t frame_id : 10; + uint32_t payload_total : 22; +} __PACKED; + +rt_inline uint32_t usb_display_min_u32(uint32_t a, uint32_t b) +{ + return (a < b) ? a : b; +} + +/** + * The usbd_display driver delivers a raw frame in frame_buf with a + * usbd_disp_frame_header at offset 0. The actual pixel payload starts + * after the header (16 bytes). We need to parse the header to get + * offset info and copy the pixels into the LCD framebuffer. + * + * For simplicity we copy the entire payload (after header) linearly + * into the LCD framebuffer with stride handling. + */ +static void usb_display_render_frame(struct usbd_display_frame *frame) +{ + if ((framebuffer == RT_NULL) || (frame == RT_NULL)) + { + return; + } + + /* + * Frame buffer layout from usbd_display: + * [0..15] : usbd_disp_frame_header (16 bytes) + * [16..end] : pixel payload + * + * frame->frame_size = header->payload_total (total pixel bytes) + * frame->frame_format = header->type (RGB565, etc.) + */ + const struct usbd_disp_frame_header *header = (const struct usbd_disp_frame_header *)frame->frame_buf; + uint32_t header_size = 16U; /* sizeof(usbd_disp_frame_header) */ + uint8_t *payload = frame->frame_buf + header_size; + uint32_t payload_len = frame->frame_size; + + if (payload_len == 0U) + { + return; + } + + uint16_t src_x = header->x; + uint16_t src_y = header->y; + uint16_t src_w = header->width; + uint16_t src_h = header->height; + + if ((src_w == 0U) || (src_h == 0U)) + { + src_w = usb_frame_width; + src_h = usb_frame_height; + src_x = 0U; + src_y = 0U; + } + + if ((src_x >= lcd_info.width) || (src_y >= lcd_info.height)) + { + return; + } + + uint32_t max_w = lcd_info.width - src_x; + uint32_t max_h = lcd_info.height - src_y; + uint32_t copy_w = usb_display_min_u32(src_w, max_w); + uint32_t copy_h = usb_display_min_u32(src_h, max_h); + + uint32_t line_bytes = ((uint32_t)src_w) * 2U; + uint32_t copy_line_bytes = ((uint32_t)copy_w) * 2U; + if (line_bytes == 0U) + { + return; + } + + uint32_t available_lines = payload_len / line_bytes; + if (available_lines < copy_h) + { + copy_h = available_lines; + } + + for (uint32_t y = 0; y < copy_h; y++) + { + uint8_t *dst = framebuffer + ((src_y + y) * fb_stride_bytes) + ((uint32_t)src_x * 2U); + uint8_t *src = payload + (y * line_bytes); + memcpy(dst, src, copy_line_bytes); + } +} + +/* ---------- Display thread ---------- */ +static void usb_display_thread_entry(void *parameter) +{ + (void)parameter; + struct usbd_display_frame *frame; + int ret; + + while (1) + { + ret = usbd_display_dequeue(&frame, 0xffffffff); + if (ret < 0) + { + continue; + } + + // USB_DISPLAY_LOG("frame type: %u, frame size %u\r\n", frame->frame_format, frame->frame_size); + + /* Render to LCD framebuffer */ + usb_display_render_frame(frame); + + /* Notify LCD to refresh */ + if (lcd_dev != RT_NULL) + { + const struct usbd_disp_frame_header *header = (const struct usbd_disp_frame_header *)frame->frame_buf; + struct rt_device_rect_info rect; + rect.x = header->x; + rect.y = header->y; + rect.width = header->width; + rect.height = header->height; + if ((rect.width == 0U) || (rect.height == 0U)) + { + rect.x = 0U; + rect.y = 0U; + rect.width = usb_frame_width; + rect.height = usb_frame_height; + } + lcd_dev->control(lcd_dev, RTGRAPHIC_CTRL_RECT_UPDATE, &rect); + } + + /* FPS tracking */ + gui_frame_count++; + if (gui_fps_last_tick == 0) + { + gui_fps_last_tick = rt_tick_get(); + gui_frame_count_last = gui_frame_count; + } + else + { + rt_tick_t now = rt_tick_get(); + rt_tick_t delta = now - gui_fps_last_tick; + if (delta >= (RT_TICK_PER_SECOND * 5U)) + { + uint32_t frames = gui_frame_count - gui_frame_count_last; + uint32_t fps_x100 = (frames * 100U * RT_TICK_PER_SECOND) / delta; + USB_DISPLAY_LOG("lcd: fps=%u.%02u (%u frames/%u ticks)\r\n", + fps_x100 / 100U, + fps_x100 % 100U, + frames, + delta); + gui_fps_last_tick = now; + gui_frame_count_last = gui_frame_count; + } + } + + /* Return frame buffer to the pool */ + usbd_display_enqueue(frame); + } +} + +/* ---------- Init ---------- */ +int usb_display_init(void) +{ + uintptr_t reg_base = (uintptr_t)USBHS_BASE; + + /* Init LCD */ + lcd_dev = rt_device_find("lcd"); + if (lcd_dev != RT_NULL) + { + rt_device_open(lcd_dev, RT_DEVICE_OFLAG_RDWR); + if (lcd_dev->control(lcd_dev, RTGRAPHIC_CTRL_GET_INFO, &lcd_info) == RT_EOK) + { + framebuffer = (uint8_t *)lcd_info.framebuffer; + usb_frame_width = USB_DISPLAY_MAX_WIDTH; + usb_frame_height = USB_DISPLAY_MAX_HEIGHT; + if (lcd_info.pitch > 0) + { + fb_stride_bytes = lcd_info.pitch; + } + else + { + fb_stride_bytes = (lcd_info.width * (lcd_info.bits_per_pixel / 8)); + } + framebuffer_size = fb_stride_bytes * lcd_info.height; + rt_kprintf("usb_display: lcd %ux%u bpp=%u stride=%u fb=%p size=%u, usb %ux%u\r\n", + lcd_info.width, + lcd_info.height, + lcd_info.bits_per_pixel, + fb_stride_bytes, + framebuffer, + framebuffer_size, + usb_frame_width, + usb_frame_height); + } + } + + if (framebuffer == RT_NULL) + { + USB_DISPLAY_LOG("usb_display: lcd not ready, will still init USB\n"); + } + + /* Create display processing thread */ + display_thread = rt_thread_create("usbdisp", usb_display_thread_entry, RT_NULL, 4096, 12, 10); + if (display_thread == RT_NULL) + { + USB_DISPLAY_LOG("usb_display: create thread failed\n"); + return -RT_ERROR; + } + rt_thread_startup(display_thread); + + /* Init frame pool (double buffering) */ + frame_pool[0].frame_buf = usb_display_buffer[0]; + frame_pool[0].frame_bufsize = USB_DISPLAY_FRAME_BYTES; + frame_pool[1].frame_buf = usb_display_buffer[1]; + frame_pool[1].frame_bufsize = USB_DISPLAY_FRAME_BYTES; + + /* Register USB display device */ + usbd_desc_register(USB_DISPLAY_BUSID, &display_descriptor); + usbd_add_interface(USB_DISPLAY_BUSID, usbd_display_init_intf(&intf0, DISPLAY_OUT_EP, DISPLAY_IN_EP, frame_pool, 2)); + usbd_initialize(USB_DISPLAY_BUSID, reg_base, usbd_event_handler); + + USB_DISPLAY_LOG("usb_display: initialized with usbd_display driver\r\n"); + return RT_EOK; +} diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/usb_display.h b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/usb_display.h new file mode 100644 index 00000000..e6ac88f7 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/applications/usb_display/usb_display.h @@ -0,0 +1,6 @@ +#ifndef USB_DISPLAY_H +#define USB_DISPLAY_H + +int usb_display_init(void); + +#endif /* USB_DISPLAY_H */ diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/SConscript b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/SConscript new file mode 100644 index 00000000..735f73af --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/SConscript @@ -0,0 +1,66 @@ +import os +import rtconfig +from building import * + +Import("SDK_LIB") + +objs = [] +cwd = GetCurrentDir() +list = os.listdir(cwd) + +# add general drivers +src = Glob('*.c') + +path = [cwd] + +startup_path_prefix = SDK_LIB +Tool_path = None +index = "mtb-device-support-pse8xxgp" + +for filename in os.listdir(startup_path_prefix): + if index in filename: + Tool_path = os.path.join(startup_path_prefix, filename) + +CPPDEFINES = [ + "BLHS_SUPPORT", + "COMPONENT_55500", + "COMPONENT_55500A1", + "COMPONENT_APP_KIT_PSE84_EVAL_EPC2", + "COMPONENT_CM55", + "COMPONENT_CM55_0", + "COMPONENT_Debug", + "COMPONENT_GCC_ARM", + "COMPONENT_GFXSS", + "COMPONENT_HARDFP", + "COMPONENT_HCI_UART", + "COMPONENT_MTB_DEVICE_SUPPORT", + "COMPONENT_MTB_HAL", + "COMPONENT_MW_ASYNC_TRANSFER", + "COMPONENT_MW_CMSIS", + "COMPONENT_MW_CORE_LIB", + "COMPONENT_MW_CORE_MAKE", + "COMPONENT_MW_RETARGET_IO", + "COMPONENT_NON_SECURE_DEVICE", + "COMPONENT_PSE84", + "COMPONENT_SM", + "CORE_NAME_CM55_0=1", + "CYBSP_MCUBOOT_HEADER_SIZE=0x400", + "CY_APPNAME_proj_cm55", + "CY_RETARGET_IO_CONVERT_LF_TO_CRLF", + "CY_SUPPORTS_DEVICE_VALIDATION", + "CY_TARGET_BOARD=APP_KIT_PSE84_EVAL_EPC2", + "DEBUG", + "PSE846GPS2DBZC4A", + "TARGET_APP_KIT_PSE84_EVAL_EPC2", + "TRXV5", + "FLASH_BOOT", + "CY_PDL_FLASH_BOOT", + "BUILD_KIT_PROCE84_EVK_M55", +] +group = DefineGroup("Drivers", src, depend=[""], CPPPATH=path, CPPDEFINES=CPPDEFINES) + +list = os.listdir(cwd) +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/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/board.c b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/board.c new file mode 100644 index 00000000..cc99888c --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/board.c @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-06-29 Rbb666 first version + * 2025-08-20 Hydevcode + */ + +#include "board.h" +#define ES8388_CTRL GET_PIN(16, 2) +#define SPEAKER_OE_CTRL GET_PIN(21, 6) +#define WIFI_OE_CTRL GET_PIN(16, 3) +#define WIFI_WL_REG_OE_CTRL GET_PIN(11, 6) +#define CTRL GET_PIN(7, 2) + +void cy_bsp_all_init(void) +{ + cy_rslt_t result; + + /* Initialize the device and board peripherals */ + result = cybsp_init(); + + /* Board init failed. Stop program execution */ + if (result != CY_RSLT_SUCCESS) + { + CY_ASSERT(0); + } +} + +void _start(void) +{ + extern int entry(void); + entry(); + while (1); + __builtin_unreachable(); +} + +void poweroff(void) +{ + rt_pin_mode(WIFI_OE_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(WIFI_OE_CTRL, PIN_LOW); + + rt_pin_mode(WIFI_WL_REG_OE_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(WIFI_WL_REG_OE_CTRL, PIN_LOW); + + rt_pin_mode(ES8388_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(ES8388_CTRL, PIN_LOW); + + rt_pin_mode(SPEAKER_OE_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(SPEAKER_OE_CTRL, PIN_LOW); + + rt_pin_mode(CTRL, PIN_MODE_OUTPUT); + rt_pin_write(CTRL, PIN_LOW); + + Cy_SysClk_PllDisable(SRSS_DPLL_LP_0_PATH_NUM); + Cy_SysPm_SystemEnterHibernate(); +} + +#ifdef RT_USING_MSH + MSH_CMD_EXPORT(poweroff, The software enables the system to shut down. Simply press the button to restart it.); +#endif + +//Mos管控制 +#define ES8388_CTRL GET_PIN(16, 2) //ES8388 电源 Enable引脚 +#define SPEAKER_OE_CTRL GET_PIN(21, 6) //功放 Enable引脚 +#define WIFI_OE_CTRL GET_PIN(16, 3) //WIFI Enable引脚 +#define WIFI_WL_REG_OE_CTRL GET_PIN(11, 6) //WiFi寄存器开关 +#define CTRL GET_PIN(7, 2) //底板 3V3 DCDC电源控制 + +//LCD 电源控制 +#define LCD_BL_GPIO_NUM GET_PIN(15, 7) //LCD 背光电源开关 +#define LCD_DISP_GPIO_NUM GET_PIN(15, 6) //LCD IC电源开关 +#define BL_PWM_DISP_CTRL GET_PIN(20, 6) //LCD PWM亮度调节 + +int en_gpio(void) +{ + rt_pin_mode(WIFI_OE_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(WIFI_OE_CTRL, PIN_HIGH); + + rt_pin_mode(WIFI_WL_REG_OE_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(WIFI_WL_REG_OE_CTRL, PIN_HIGH); + + rt_pin_mode(ES8388_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(ES8388_CTRL, PIN_HIGH); + + rt_pin_mode(SPEAKER_OE_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(SPEAKER_OE_CTRL, PIN_HIGH); + + /* LCD 电源和背光使能 */ + rt_pin_mode(BL_PWM_DISP_CTRL, PIN_MODE_OUTPUT); + rt_pin_write(BL_PWM_DISP_CTRL, PIN_HIGH); + + rt_pin_mode(LCD_DISP_GPIO_NUM, PIN_MODE_OUTPUT); + rt_pin_write(LCD_DISP_GPIO_NUM, PIN_HIGH); + + rt_pin_mode(LCD_BL_GPIO_NUM, PIN_MODE_OUTPUT); + rt_pin_write(LCD_BL_GPIO_NUM, PIN_HIGH); + + return 0; +} +INIT_BOARD_EXPORT(en_gpio); \ No newline at end of file diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/board.h b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/board.h new file mode 100644 index 00000000..93078cf7 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/board.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2006-2023, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2022-06-29 Rbb666 first version + * 2022-07-26 Rbb666 Add Flash Config + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include +#include "drv_common.h" +#include "drv_gpio.h" + +#include "cy_result.h" +#include "cybsp_types.h" +#include "mtb_hal.h" +#include "cybsp.h" + +#ifdef BSP_USING_USBD + #include "cy_usb_dev.h" + #include "cy_usb_dev_hid.h" +#endif + +/*SRAM CONFIG*/ +#define IFX_SRAM_SIZE (1408) +#define IFX_SRAM_END (0x26060000 + IFX_SRAM_SIZE * 1024) + +#ifdef __ARMCC_VERSION + extern int Image$$RW_IRAM1$$ZI$$Limit; + #define HEAP_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) + #define HEAP_END IFX_SRAM_END +#elif __ICCARM__ + #pragma section="HEAP" + #define HEAP_BEGIN (__segment_end("HEAP")) +#else + extern unsigned int __end__; + extern unsigned int __HeapLimit; + #define HEAP_BEGIN (void*)&__end__ + #define HEAP_END (void*)&__HeapLimit +#endif + +void cy_bsp_all_init(void); + +#endif + diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/linker_scripts/link.ld b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/linker_scripts/link.ld new file mode 100644 index 00000000..55263e9c --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/board/linker_scripts/link.ld @@ -0,0 +1,449 @@ +/***************************************************************************//** +* \file pse84_ns_cm55.ld +* \version 1.0.0 +* +* Linker file for the GNU C compiler. +* +* The main purpose of the linker script is to describe how the sections in the +* input files should be mapped into the output file, and to control the memory +* layout of the output file. +* +* +* \note The linker files included with the PDL template projects must be generic +* and handle all common use cases. Your project may not use every section +* defined in the linker files. In that case you may see warnings during the +* build process. In your project, you can simply comment out or remove the +* relevant code in the linker file. +* +******************************************************************************** +* \copyright +* Copyright (c) (2020-2025), Cypress Semiconductor Corporation (an Infineon company) or +* an affiliate of Cypress Semiconductor Corporation. +* SPDX-License-Identifier: Apache-2.0 +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*******************************************************************************/ +/* Specify the output format for the linker script */ +OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +/* Search for libraries in the current directory */ +SEARCH_DIR(.) +/* Specify the group of libraries to link against */ +GROUP(-lgcc -lc -lnosys) +GROUP(libgcc.a libc.a libm.a libnosys.a) +/* Define the entry point of the program, which is the reset handler */ +ENTRY(Reset_Handler) + +/* Define the stack size for the application */ +/* To set stack size in application add makefile ldflags: -Wl,--defsym=APP_MSP_STACK_SIZE= */ +PROVIDE(__StackSize = DEFINED(APP_MSP_STACK_SIZE) ? APP_MSP_STACK_SIZE : 0x1000); + +/* Include the device memory definitions generated by the Device Configurator */ +/* This file is automatically generated. */ + +MEMORY +{ + m55_data_INTERNAL : ORIGIN = 0x20000000, LENGTH = 0x00040000 + m55_code_INTERNAL : ORIGIN = 0x00000000, LENGTH = 0x00040000 + m55_nvm : ORIGIN = 0x60580000, LENGTH = 0x00800000 + m55_trailer : ORIGIN = 0x60D80000, LENGTH = 0x00040000 + m55_code_secondary : ORIGIN = 0x26000000, LENGTH = 0x00060000 + m55_data_secondary : ORIGIN = 0x26060000, LENGTH = 0x00160000 + m33_m55_shared : ORIGIN = 0x261C0000, LENGTH = 0x00040000 + gfx_mem : ORIGIN = 0x26200000, LENGTH = 0x00300000 + m55_allocatable_shared : ORIGIN = 0x240FF000, LENGTH = 0x00001000 +} + +REGION_ALIAS("m55_data_sel", m55_data_INTERNAL) +REGION_ALIAS("m55_code_sel", m55_code_INTERNAL) +REGION_ALIAS("m55_nvm_sel", m55_nvm) +REGION_ALIAS("m55_trailer_sel", m55_trailer) +REGION_ALIAS("m55_code_secondary_sel", m55_code_secondary) +REGION_ALIAS("m55_data_secondary_sel", m55_data_secondary) +REGION_ALIAS("m33_m55_shared_sel", m33_m55_shared) +REGION_ALIAS("gfx_mem_sel", gfx_mem) +REGION_ALIAS("m55_allocatable_shared_sel", m55_allocatable_shared) + + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ + +/* Device definitions */ +VECTORS_ALIGNMENT = 0x400; + +/* The size of the MCU boot header area at the start of main code region */ +MCUBOOT_HEADER_SIZE = 0x400; + +/* Define the sections */ +SECTIONS +{ + /* This section reserves a space for MCUBoot header */ + .mcu_boot_header (READONLY) : ALIGN(MCUBOOT_HEADER_SIZE) + { + . += MCUBOOT_HEADER_SIZE; + } > m55_nvm_sel + + /* This section is intended to hold the main application code for the Cortex-M55 */ + /* Performance-sensitive or critical functions that need to be executed in sram are manually excluded */ + .app_code_main : ALIGN(VECTORS_ALIGNMENT) + { + __text_begin = .; + __Vectors = . ; + /* Keep the vector table */ + KEEP(*(.vectors)) + + . = ALIGN(4); + + __Vectors_End = .; + + /* Keep initializers */ + KEEP(*(.init)) + /* Keep finalizers */ + KEEP(*(.fini)) + /* Static constructors */ + *crtbegin.*(.ctors) + *crtbegin?.*(.ctors) + *(EXCLUDE_FILE(*crtend?.* *crtend.*) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + /* Static destructors and atexit() */ + *crtbegin.*(.dtors) + *crtbegin?.*(.dtors) + *(EXCLUDE_FILE(*crtend?.* *crtend.*) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + /* Read only code (constants) */ + *(.rodata .rodata.* .constdata .constdata.* .conststring .conststring.*) + /* Exclude certain files from this section as they will be placed in RAM */ + *(EXCLUDE_FILE(*cy_syslib.* *cy_syslib_ext.* *cy_smif.* *cy_smif_memnum.* *cy_smif_memslot.* *cy_smif_sfdp.* *cy_smif_hb_flash.* *mtb_hal_memoryspi.* *mtb_serial_memory.* *freertos/Source*.* *cy_clib_support*.* *cy_mutex_pool*.* *cy_time.* *cyabs_*.* *cy_worker_thread.* *cmsis*.*) .text*) + + . = ALIGN(4); + /* section information for utest */ + . = ALIGN(4); + __rt_utest_tc_tab_start = .; + KEEP(*(UtestTcTab)) + __rt_utest_tc_tab_end = .; + + /* section information for finsh shell */ + . = ALIGN(4); + __fsymtab_start = .; + KEEP(*(FSymTab)) + __fsymtab_end = .; + . = ALIGN(4); + __vsymtab_start = .; + KEEP(*(VSymTab)) + __vsymtab_end = .; + . = ALIGN(4); + + /* section information for modules */ + . = ALIGN(4); + __rtmsymtab_start = .; + KEEP(*(RTMSymTab)) + __rtmsymtab_end = .; + + /* section information for initialization */ + . = ALIGN(4); + __rt_init_start = .; + KEEP(*(SORT(.rti_fn*))) + __rt_init_end = .; + + __text_end = .; + _etext = .; + _estack = .; + } > m55_nvm_sel + . = ALIGN(4); + .ctors : + { + PROVIDE(__ctors_start__ = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + } > m55_nvm_sel + + . = ALIGN(4); + .dtors : + { + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + } > m55_nvm_sel + + /* Exception tables for ARM architecture */ + .ARM.extab (READONLY) : ALIGN(4) + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > m55_nvm_sel + + /* Exception index tables for ARM architecture */ + .ARM.exidx (READONLY) : ALIGN(4) + { + __exidx_start = .; + + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + + __exidx_end = .; + } > m55_nvm_sel + + + /* Define copying of data from flash memory to RAM during the startup */ + .copy.table (READONLY) : ALIGN(4) + { + __copy_table_start__ = .; + + /* Initialized data in DTCM */ + LONG(LOADADDR(.data)) /* From load address in ext flash */ + LONG(ADDR(.data)) /* To run address in DTCM */ + LONG(SIZEOF(.data)/4) /* Size in words */ + + /* Initialized data in SOC memory */ + LONG(LOADADDR(.cy_socmem_data)) /* From load address in ext flash */ + LONG(ADDR(.cy_socmem_data)) /* To run address in SOCMEM */ + LONG(SIZEOF(.cy_socmem_data)/4) /* Size in words */ + + /* Code in ITCM */ + LONG (LOADADDR(.app_code_itcm)) /* From load address in ext flash */ + LONG (ADDR(.app_code_itcm)) /* To run address in ITCM */ + LONG (SIZEOF(.app_code_itcm)/4) /* Size in words */ + + /* Code in SOC memory */ + LONG (LOADADDR(.app_code_socmem)) /* From load address in ext flash */ + LONG (ADDR(.app_code_socmem)) /* To run address in SOCMEM */ + LONG (SIZEOF(.app_code_socmem)/4) /* Size in words */ + + __copy_table_end__ = .; + } > m55_nvm_sel + + /* Define zeroing of the uninitialized data section */ + .zero.table (READONLY): ALIGN(4) + { + __zero_table_start__ = .; + + LONG(__bss_start__) /* Start of the zero-initialized data section */ + LONG((__bss_end__ - __bss_start__)/4) /* Size of the zero-initialized data section in words */ + + __zero_table_end__ = .; + } > m55_nvm_sel + + /* A section for performance-sensitive or critical functions that need to be executed in ITCM */ + .app_code_itcm : ALIGN(16) + { + /* Reserving the first 16 bytes to avoid debug symbols (that have default address 0x0) to be confused with actual code */ + . += 16; + KEEP(*(.cy_itcm)) + KEEP(*(.cy_sram_code)) + KEEP(*(.cy_ramfunc)) + KEEP(*(.text.cy_os_common)) + *cy_syslib_ext.*(.text*) + *cy_syslib.*(.text*) + *cy_smif.*(.text*) + *cy_smif_memnum.*(.text*) + *cy_smif_memslot.*(.text*) + *cy_smif_sfdp.*(.text*) + *cy_smif_hb_flash.*(.text*) + *mtb_hal_memoryspi.*(.text*) + *mtb_serial_memory.*(.text*) + *freertos/Source*.*(.text*) + *cy_clib_support*.*(.text*) + *cy_mutex_pool*.*(.text*) + *cy_time.*(.text*) + *cyabs_*.*(.text*) + *cy_worker_thread.*(.text*) + *cmsis*.*(.text*) + + . = ALIGN(4); + } > m55_code_INTERNAL AT > m55_nvm_sel + + /* A section for the vector table */ + .ram_vectors (NOLOAD) : ALIGN(VECTORS_ALIGNMENT) + { + __ram_vectors_start__ = .; + + KEEP(*(.ram_vectors)) + + __ram_vectors_end__ = .; + } > m55_code_INTERNAL + + /* A section for less performance-sensitive or critical functions that might be executed in SOC memory */ + .app_code_socmem : ALIGN(4) + { + KEEP(*(.cy_socmem_code)) + + . = ALIGN(4); + } > m55_code_secondary AT > m55_nvm_sel + + /* A section for initialized data memory */ + .data : ALIGN(4) + { + __data_start__ = .; + + *(vtable) + *(.data*) + + . = ALIGN(4); + + /* Array of pointers to preinit functions */ + PROVIDE_HIDDEN (__preinit_array_start = .); + + KEEP(*(.preinit_array)) + + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + + /* Array of pointers to init functions */ + PROVIDE_HIDDEN (__init_array_start = .); + + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + + /* Array of pointers to finalizer functions */ + + PROVIDE_HIDDEN (__fini_array_start = .); + + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + + . = ALIGN(4); + + KEEP(*(.cy_dtcm)) + + . = ALIGN(4); + + __data_end__ = .; + } > m55_data_INTERNAL AT > m55_nvm_sel + + /* A section for variables that should not be initialized during the device startup */ + .noinit (NOLOAD) : ALIGN(8) + { + __noinit_start__ = .; + + KEEP(*(.noinit)) + + . = ALIGN(4); + + __noinit_end__ = .; + } > m55_data_INTERNAL + + /* A section for non-initialized data memory */ + .bss(NOLOAD) : ALIGN(4) + { + __bss_start__ = .; + + *(.bss*) + *(COMMON) + + . = ALIGN(4); + + __bss_end__ = .; + } > m55_data_INTERNAL + + __StackTop = ORIGIN(m55_data_INTERNAL) + LENGTH(m55_data_INTERNAL); + __StackLimit = __StackTop - __StackSize; + PROVIDE(__stack = __StackTop); + + /* Check if .data + .noinit + .bss + stack exceeds RAM limit in region m55_data_INTERNAL */ + ASSERT( + __StackLimit >= __bss_end__, + "Error: m55_data_INTERNAL region overflowed with stack. Ensure that the stack size is within the available RAM." + ) + + /* A section for SOC memory data */ + .cy_socmem_data : ALIGN(4) + { + KEEP(*(.cy_socmem_data)) + + . = ALIGN(4); + + } > m55_data_secondary AT > m55_nvm_sel + + /* A section for the heap memory */ + .heap(NOLOAD) : ALIGN(8) + { + __HeapBase = .; + __end__ = .; + end = __end__; + + KEEP(*(.heap*)) + + . = ORIGIN(m55_data_secondary) + LENGTH(m55_data_secondary); + + __HeapLimit = .; + } > m55_data_secondary + + /* A section for the GPU buffer (LCD framebuffer, VGLite heap) */ + .cy_gpu_buf(NOLOAD) : + { + KEEP(*(.cy_gpu_buf)) + } > gfx_mem + + /* A section for USB display frame buffers, placed after GPU buffers */ + .cy_usb_display_buf(NOLOAD) : ALIGN(32) + { + KEEP(*(.cy_usb_display_buf)) + } > gfx_mem + + .reserved_socmem(NOLOAD) : + { + . = ORIGIN(m33_m55_shared) + LENGTH(m33_m55_shared); /* reserved SOC memory */ + } > m33_m55_shared + + + /* A section for shared RAM memory where only the Cortex-M55 can allocate data but all cores can access */ + .cy_sharedmem(NOLOAD) : ALIGN(4) + { + KEEP(*(.cy_sharedmem)) + + . = ALIGN(4); + } > m55_allocatable_shared + + /* Reserve a trail space for the signature for the bootloader - do not place any code here */ + .cy_trailer(NOLOAD) : + { + } > m55_trailer_sel + +} diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/figures/config.png b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/figures/config.png new file mode 100644 index 00000000..f68c50c5 Binary files /dev/null and b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/figures/config.png differ diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/figures/new_screen.png b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/figures/new_screen.png new file mode 100644 index 00000000..766d44d9 Binary files /dev/null and b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/figures/new_screen.png differ diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/mklinks.bat b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/mklinks.bat new file mode 100644 index 00000000..4676aa72 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/mklinks.bat @@ -0,0 +1,8 @@ +@echo off +cd /d "%~dp0" +@echo on +mklink /J rt-thread ..\..\..\rt-thread +mklink /J libraries ..\..\..\libraries +mklink /J libs ..\..\libs +mklink /J tools ..\..\..\tools +mklink /J resources ..\..\..\resources \ No newline at end of file diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/rtconfig.h b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/rtconfig.h new file mode 100644 index 00000000..0a996a90 --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/rtconfig.h @@ -0,0 +1,355 @@ +#ifndef RT_CONFIG_H__ +#define RT_CONFIG_H__ + +/* RT-Thread Kernel */ + +#define RT_NAME_MAX 8 +#define RT_ALIGN_SIZE 8 +#define RT_THREAD_PRIORITY_32 +#define RT_THREAD_PRIORITY_MAX 32 +#define RT_TICK_PER_SECOND 1000 +#define RT_USING_OVERFLOW_CHECK +#define RT_USING_HOOK +#define RT_HOOK_USING_FUNC_PTR +#define RT_USING_IDLE_HOOK +#define RT_IDLE_HOOK_LIST_SIZE 4 +#define IDLE_THREAD_STACK_SIZE 1024 +#define RT_USING_TIMER_SOFT +#define RT_TIMER_THREAD_PRIO 4 +#define RT_TIMER_THREAD_STACK_SIZE 512 + +/* kservice optimization */ + +#define RT_KSERVICE_USING_STDLIB +/* end of kservice optimization */ +#define RT_USING_DEBUG +#define RT_DEBUGING_COLOR +#define RT_DEBUGING_CONTEXT + +/* Inter-Thread communication */ + +#define RT_USING_SEMAPHORE +#define RT_USING_MUTEX +#define RT_USING_EVENT +#define RT_USING_MAILBOX +#define RT_USING_MESSAGEQUEUE +/* end of Inter-Thread communication */ + +/* Memory Management */ + +#define RT_USING_MEMPOOL +#define RT_USING_SMALL_MEM +#define RT_USING_MEMHEAP +#define RT_MEMHEAP_FAST_MODE +#define RT_USING_MEMHEAP_AS_HEAP +#define RT_USING_MEMHEAP_AUTO_BINDING +#define RT_USING_HEAP +/* end of Memory Management */ + +/* Kernel Device Object */ + +#define RT_USING_DEVICE +#define RT_USING_CONSOLE +#define RT_CONSOLEBUF_SIZE 1024 +#define RT_CONSOLE_DEVICE_NAME "uart2" +/* end of Kernel Device Object */ +#define RT_VER_NUM 0x50002 +/* end of RT-Thread Kernel */ + +/* RT-Thread Components */ + +#define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 +#define RT_USING_MSH +#define RT_USING_FINSH +#define FINSH_USING_MSH +#define FINSH_THREAD_NAME "tshell" +#define FINSH_THREAD_PRIORITY 20 +#define FINSH_THREAD_STACK_SIZE 4096 +#define FINSH_USING_HISTORY +#define FINSH_HISTORY_LINES 5 +#define FINSH_USING_SYMTAB +#define FINSH_CMD_SIZE 80 +#define MSH_USING_BUILT_IN_COMMANDS +#define FINSH_USING_DESCRIPTION +#define FINSH_ARG_MAX 10 +#define FINSH_USING_OPTION_COMPLETION + +/* DFS: device virtual file system */ + +/* end of DFS: device virtual file system */ + +/* Device Drivers */ + +#define RT_USING_DEVICE_IPC +#define RT_UNAMED_PIPE_NUMBER 64 +#define RT_USING_SERIAL +#define RT_USING_SERIAL_V1 +#define RT_SERIAL_RB_BUFSZ 128 +#define RT_USING_I2C +#define RT_USING_I2C_BITOPS +#define RT_USING_PIN +#define RT_USING_TOUCH +#define RT_TOUCH_PIN_IRQ +#define RT_USING_LCD + +/* Using USB */ + +/* end of Using USB */ +/* end of Device Drivers */ + +/* C/C++ and POSIX layer */ + +/* ISO-ANSI C layer */ + +/* Timezone and Daylight Saving Time */ + +#define RT_LIBC_USING_LIGHT_TZ_DST +#define RT_LIBC_TZ_DEFAULT_HOUR 8 +#define RT_LIBC_TZ_DEFAULT_MIN 0 +#define RT_LIBC_TZ_DEFAULT_SEC 0 +/* end of Timezone and Daylight Saving Time */ +/* end of ISO-ANSI C layer */ + +/* POSIX (Portable Operating System Interface) layer */ + + +/* Interprocess Communication (IPC) */ + + +/* Socket is in the 'Network' category */ + +/* end of Interprocess Communication (IPC) */ +/* end of POSIX (Portable Operating System Interface) layer */ +/* end of C/C++ and POSIX layer */ + +/* Network */ + +/* end of Network */ + +/* Utilities */ + +/* end of Utilities */ +/* end of RT-Thread Components */ + +/* RT-Thread Utestcases */ + +/* end of RT-Thread Utestcases */ + +/* RT-Thread online packages */ + +/* IoT - internet of things */ + + +/* Wi-Fi */ + +/* Marvell WiFi */ + +/* end of Marvell WiFi */ + +/* Wiced WiFi */ + +/* end of Wiced WiFi */ + +/* CYW43012 WiFi */ + +/* end of CYW43012 WiFi */ + +/* BL808 WiFi */ + +/* end of BL808 WiFi */ + +/* CYW43439 WiFi */ + +/* end of CYW43439 WiFi */ +/* end of Wi-Fi */ + +/* IoT Cloud */ + +/* end of IoT Cloud */ +/* end of IoT - internet of things */ + +/* security packages */ + +/* end of security packages */ + +/* language packages */ + +/* JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* end of JSON: JavaScript Object Notation, a lightweight data-interchange format */ + +/* XML: Extensible Markup Language */ + +/* end of XML: Extensible Markup Language */ +/* end of language packages */ + +/* multimedia packages */ + +/* LVGL: powerful and easy-to-use embedded GUI library */ + +/* end of LVGL: powerful and easy-to-use embedded GUI library */ + +/* u8g2: a monochrome graphic library */ + +/* end of u8g2: a monochrome graphic library */ +/* end of multimedia packages */ + +/* tools packages */ + +/* end of tools packages */ + +/* system packages */ + +/* enhanced kernel services */ + +/* end of enhanced kernel services */ + +/* acceleration: Assembly language or algorithmic acceleration packages */ + +/* end of acceleration: Assembly language or algorithmic acceleration packages */ + +/* CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* end of CMSIS: ARM Cortex-M Microcontroller Software Interface Standard */ + +/* Micrium: Micrium software products porting for RT-Thread */ + +/* end of Micrium: Micrium software products porting for RT-Thread */ +/* end of system packages */ + +/* peripheral libraries and drivers */ + +/* HAL & SDK Drivers */ + +/* STM32 HAL & SDK Drivers */ + +/* end of STM32 HAL & SDK Drivers */ + +/* Infineon HAL Packages */ + +/* end of Infineon HAL Packages */ + +/* Kendryte SDK */ + +/* end of Kendryte SDK */ +/* end of HAL & SDK Drivers */ + +/* sensors drivers */ + +/* end of sensors drivers */ + +/* touch drivers */ + +/* end of touch drivers */ +/* end of peripheral libraries and drivers */ + +/* AI packages */ + +/* end of AI packages */ + +/* Signal Processing and Control Algorithm Packages */ + +/* end of Signal Processing and Control Algorithm Packages */ + +/* miscellaneous packages */ + +/* project laboratory */ + +/* end of project laboratory */ + +/* samples: kernel and components samples */ + +/* end of samples: kernel and components samples */ + +/* entertainment: terminal games and other interesting software packages */ + +/* end of entertainment: terminal games and other interesting software packages */ +/* end of miscellaneous packages */ + +/* Arduino libraries */ + + +/* Projects and Demos */ + +/* end of Projects and Demos */ + +/* Sensors */ + +/* end of Sensors */ + +/* Display */ + +/* end of Display */ + +/* Timing */ + +/* end of Timing */ + +/* Data Processing */ + +/* end of Data Processing */ + +/* Data Storage */ + +/* Communication */ + +/* end of Communication */ + +/* Device Control */ + +/* end of Device Control */ + +/* Other */ + +/* end of Other */ + +/* Signal IO */ + +/* end of Signal IO */ + +/* Uncategorized */ + +/* end of Arduino libraries */ +/* end of RT-Thread online packages */ +#define RT_USING_CHERRYUSB +#define RT_CHERRYUSB_DEVICE +#define RT_CHERRYUSB_DEVICE_SPEED_HS +#define RT_CHERRYUSB_DEVICE_DWC2_INFINEON +#define RT_CHERRYUSB_DEVICE_CDC_ACM +#define RT_CHERRYUSB_DEVICE_DISPLAY +#define CONFIG_USBDEV_REQUEST_BUFFER_LEN 512 +#define CONFIG_USBDEV_MSC_MAX_BUFSIZE 512 +#define RT_CHERRYUSB_DEVICE_TEMPLATE_NONE + +/* Hardware Drivers Config */ + +#define SOC_SERIES_IFX_PSOCE84 +#define KIT_PROCE84_EVK_M55 + +/* Onboard Peripheral Drivers */ + +#define BSP_USING_USB_TO_UART +/* end of Onboard Peripheral Drivers */ + +/* On-chip Peripheral Drivers */ + +#define BSP_USING_GPIO +#define BSP_USING_I2C +#define BSP_USING_SOFT_I2C1 +#define BSP_SOFT_I2C1_SCL_PIN 25 +#define BSP_SOFT_I2C1_SDA_PIN 107 +#define BSP_USING_UART +#define BSP_USING_UART2 +#define BSP_USING_LCD +#define COMPONENT_MTB_DISPLAY_tl043wvv02 +/* end of On-chip Peripheral Drivers */ + +/* Board extended module Drivers */ + +/* end of Board extended module Drivers */ +/* end of Hardware Drivers Config */ + +#endif diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/rtconfig.py b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/rtconfig.py new file mode 100644 index 00000000..bc4522bb --- /dev/null +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen/rtconfig.py @@ -0,0 +1,103 @@ +import os + +# toolchains options +ARCH='arm' +CPU='cortex-m7' +CROSS_TOOL='gcc' + +# bsp lib config +BSP_LIBRARY_TYPE = None + +if os.getenv('RTT_CC'): + CROSS_TOOL = os.getenv('RTT_CC') +if os.getenv('RTT_ROOT'): + RTT_ROOT = os.getenv('RTT_ROOT') + +# cross_tool provides the cross compiler +# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR +if CROSS_TOOL == 'gcc': + PLATFORM = 'gcc' + EXEC_PATH = r'C:\Users\XXYYZZ' +elif CROSS_TOOL == 'keil': + PLATFORM = 'armclang' + EXEC_PATH = r'C:/Keil_v5' +elif CROSS_TOOL == 'iar': + PLATFORM = 'iccarm' + EXEC_PATH = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3' + +if os.getenv('RTT_EXEC_PATH'): + EXEC_PATH = os.getenv('RTT_EXEC_PATH') + +BUILD = 'debug' + +if PLATFORM == 'gcc': + # toolchains + PREFIX = 'arm-none-eabi-' + CC = PREFIX + 'gcc' + AS = PREFIX + 'gcc' + AR = PREFIX + 'ar' + CXX = PREFIX + 'g++' + LINK = PREFIX + 'gcc' + TARGET_EXT = 'elf' + SIZE = PREFIX + 'size' + OBJDUMP = PREFIX + 'objdump' + OBJCPY = PREFIX + 'objcopy' + + DEVICE = ' -mcpu=cortex-m7 -mthumb -mfpu=fpv5-d16 --specs=nano.specs -mfloat-abi=hard -ffunction-sections -fdata-sections -nostartfiles -nostartfiles' + CFLAGS = DEVICE + ' -g -Wall -pipe' + AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb ' + LFLAGS = DEVICE + ' -flto -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.ld' + + CPATH = '' + LPATH = '' + + if BUILD == 'debug': + CFLAGS += ' -O3 -gdwarf-2 -g' + AFLAGS += ' -gdwarf-2' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + + POST_ACTION = OBJCPY + ' -O ihex $TARGET rtthread.hex\n' + SIZE + ' $TARGET \n' + +elif PLATFORM == 'armclang': + # toolchains + CC = 'armclang' + CXX = 'armclang' + AS = 'armasm' + AR = 'armar' + LINK = 'armlink' + TARGET_EXT = 'axf' + + DEVICE = ' --cpu Cortex-M4.fp ' + CFLAGS = ' --target=arm-arm-none-eabi -mcpu=cortex-m4 ' + CFLAGS += ' -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 ' + CFLAGS += ' -mfloat-abi=hard -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar ' + CFLAGS += ' -gdwarf-3 -ffunction-sections ' + AFLAGS = DEVICE + ' --apcs=interwork ' + LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers ' + LFLAGS += ' --list rt-thread.map ' + LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" ' + CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCLANG/include' + LFLAGS += ' --libpath=' + EXEC_PATH + '/ARM/ARMCLANG/lib' + + EXEC_PATH += '/ARM/ARMCLANG/bin/' + + if BUILD == 'debug': + CFLAGS += ' -g -O1' # armclang recommend + AFLAGS += ' -g' + else: + CFLAGS += ' -O2' + + CXXFLAGS = CFLAGS + CFLAGS += ' -std=c99' + + POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET' + +def dist_handle(BSP_ROOT, dist_dir): + import sys + cwd_path = os.getcwd() + sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools')) + from sdk_dist import dist_do_building + dist_do_building(BSP_ROOT, dist_dir) diff --git a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_D/SConstruct b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_D/SConstruct index b1553cdc..dfd7328c 100644 --- a/projects/Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_D/SConstruct +++ b/projects/Edgi_Talk_CherryUSB/Edgi_Talk_M55_USB_D/SConstruct @@ -89,7 +89,6 @@ if platform.system() == 'Windows': # Add project libs with VariantDir if os.path.exists(os.path.join(os.getcwd(), "libs", "SConscript")): env.VariantDir('build/libs', 'libs', duplicate=0) - objs.extend(SConscript('libs/SConscript', variant_dir='build/libs', duplicate=0)) else: env.VariantDir('build/libs', '../../libs', duplicate=0) objs.extend(SConscript('../../libs/SConscript', variant_dir='build/libs', duplicate=0)) diff --git a/sdk-bsp-psoc_e84-edgi-talk.yaml b/sdk-bsp-psoc_e84-edgi-talk.yaml index d12f975c..b92b0b15 100644 --- a/sdk-bsp-psoc_e84-edgi-talk.yaml +++ b/sdk-bsp-psoc_e84-edgi-talk.yaml @@ -394,6 +394,44 @@ example_projects: source_path_offset: '' target_path_offset: '' files_and_folders: [] + +- project_name: Edgi_Talk_Extend_Screen + project_description: M55 CherryUSB USB 拓展屏幕示例 + project_type: rt-thread|@full|@5.0.2 + builtin_files: + - source_path_offset: 'projects/Edgi_Talk_CherryUSB/Edgi_Talk_Extend_Screen' + target_path_offset: '' + files_and_folders: + - "*" + - source_path_offset: 'projects/' + target_path_offset: '' + files_and_folders: + - libs + - source_path_offset: '' + target_path_offset: '' + files_and_folders: + - libraries + - rt-thread + - resources + - source_path_offset: 'tools' + target_path_offset: 'tools' + files_and_folders: + - "*" + external_files: + - package_name: GNU_Tools_for_ARM_Embedded_Processors + package_type: ToolChain_Support_Packages + package_vendor: 'ARM' + package_version: '13.3' + source_path_offset: '.' + target_path_offset: '.' + files_and_folders: [] + - package_name: OpenOCD-Infineon + package_type: Debugger_Support_Packages + package_vendor: 'Infineon' + package_version: '2.0.0' + source_path_offset: '' + target_path_offset: '' + files_and_folders: [] - project_name: Edgi_Talk_M33_SDCARD project_description: SD卡示例 @@ -849,6 +887,7 @@ example_projects: files_and_folders: - libraries - rt-thread + - resources - source_path_offset: 'tools' target_path_offset: 'tools' files_and_folders: @@ -886,6 +925,7 @@ example_projects: files_and_folders: - libraries - rt-thread + - resources - source_path_offset: 'tools' target_path_offset: 'tools' files_and_folders: