Signed-off-by: 吴文峰 <kevin@lmve.net>
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
CompileFlags:
|
||||||
|
Remove: [-f*, -m*]
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
ARG DOCKER_TAG=latest
|
||||||
|
FROM espressif/idf:${DOCKER_TAG}
|
||||||
|
|
||||||
|
ENV LC_ALL=C.UTF-8
|
||||||
|
ENV LANG=C.UTF-8
|
||||||
|
|
||||||
|
RUN apt-get update -y && apt-get install udev -y
|
||||||
|
|
||||||
|
RUN echo "source /opt/esp/idf/export.sh > /dev/null 2>&1" >> ~/.bashrc
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/opt/esp/entrypoint.sh" ]
|
||||||
|
|
||||||
|
CMD ["/bin/bash", "-c"]
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "ESP-IDF QEMU",
|
||||||
|
"build": {
|
||||||
|
"dockerfile": "Dockerfile"
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
"terminal.integrated.defaultProfile.linux": "bash",
|
||||||
|
"idf.espIdfPath": "/opt/esp/idf",
|
||||||
|
"idf.toolsPath": "/opt/esp",
|
||||||
|
"idf.gitPath": "/usr/bin/git"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"espressif.esp-idf-extension",
|
||||||
|
"espressif.esp-idf-web"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runArgs": ["--privileged"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Directory metadata
|
||||||
|
.directory
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*~
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*.bak
|
||||||
|
*.tmp
|
||||||
|
|
||||||
|
# Log files
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# Build artifacts and directories
|
||||||
|
**/build/
|
||||||
|
build/
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*.out
|
||||||
|
*.exe # For any host-side utilities compiled on Windows
|
||||||
|
|
||||||
|
# ESP-IDF specific build outputs
|
||||||
|
*.bin
|
||||||
|
*.elf
|
||||||
|
*.map
|
||||||
|
flasher_args.json # Generated in build directory
|
||||||
|
sdkconfig.old
|
||||||
|
sdkconfig
|
||||||
|
|
||||||
|
# ESP-IDF dependencies
|
||||||
|
# For older versions or manual component management
|
||||||
|
/components/.idf/
|
||||||
|
**/components/.idf/
|
||||||
|
# For modern ESP-IDF component manager
|
||||||
|
managed_components/
|
||||||
|
# If ESP-IDF tools are installed/referenced locally to the project
|
||||||
|
.espressif/
|
||||||
|
|
||||||
|
# CMake generated files
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles/
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
CTestTestfile.cmake
|
||||||
|
|
||||||
|
# Python environment files
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
__pycache__/
|
||||||
|
*.egg-info/
|
||||||
|
dist/
|
||||||
|
|
||||||
|
# Virtual environment folders
|
||||||
|
venv/
|
||||||
|
.venv/
|
||||||
|
env/
|
||||||
|
|
||||||
|
# Language Servers
|
||||||
|
.clangd/
|
||||||
|
.ccls-cache/
|
||||||
|
compile_commands.json
|
||||||
|
|
||||||
|
# Windows specific
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# User-specific configuration files
|
||||||
|
*.user
|
||||||
|
*.workspace # General workspace files, can be from various tools
|
||||||
|
*.suo # Visual Studio Solution User Options
|
||||||
|
*.sln.docstates # Visual Studio
|
||||||
+23
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "ESP-IDF",
|
||||||
|
"compilerPath": "${config:idf.toolsPathWin}\\tools\\xtensa-esp-elf\\esp-14.2.0_20251107\\xtensa-esp-elf\\bin\\xtensa-esp32-elf-gcc.exe",
|
||||||
|
"compileCommands": "${config:idf.buildPath}/compile_commands.json",
|
||||||
|
"includePath": [
|
||||||
|
"${config:idf.espIdfPath}/components/**",
|
||||||
|
"${config:idf.espIdfPathWin}/components/**",
|
||||||
|
"${workspaceFolder}/**"
|
||||||
|
],
|
||||||
|
"browse": {
|
||||||
|
"path": [
|
||||||
|
"${config:idf.espIdfPath}/components",
|
||||||
|
"${config:idf.espIdfPathWin}/components",
|
||||||
|
"${workspaceFolder}"
|
||||||
|
],
|
||||||
|
"limitSymbolsToIncludedHeaders": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"version": 4
|
||||||
|
}
|
||||||
Vendored
+15
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "gdbtarget",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "Eclipse CDT GDB Adapter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "espidf",
|
||||||
|
"name": "Launch",
|
||||||
|
"request": "launch"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Vendored
+20
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"C_Cpp.intelliSenseEngine": "default",
|
||||||
|
"idf.espIdfPathWin": "C:\\Users\\wuwen\\esp\\v5.5.2\\esp-idf",
|
||||||
|
"idf.pythonInstallPath": "C:\\Espressif\\tools\\idf-python\\3.11.2\\python.exe",
|
||||||
|
"idf.openOcdConfigs": [
|
||||||
|
"board/esp32c3-builtin.cfg"
|
||||||
|
],
|
||||||
|
"idf.toolsPathWin": "C:\\Espressif",
|
||||||
|
"idf.customExtraVars": {
|
||||||
|
"IDF_TARGET": "esp32c3"
|
||||||
|
},
|
||||||
|
"clangd.path": "C:\\Espressif\\tools\\esp-clang\\esp-19.1.2_20250312\\esp-clang\\bin\\clangd.exe",
|
||||||
|
"clangd.arguments": [
|
||||||
|
"--background-index",
|
||||||
|
"--query-driver=**",
|
||||||
|
"--compile-commands-dir=c:\\Users\\wuwen\\Documents\\prj\\hantai_project\\espidfcode\\build"
|
||||||
|
],
|
||||||
|
"idf.flashType": "UART",
|
||||||
|
"idf.portWin": "COM4"
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# The following lines of boilerplate have to be in your project's
|
||||||
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
# "Trim" the build. Include the minimal set of components, main, and anything it depends on.
|
||||||
|
idf_build_set_property(MINIMAL_BUILD ON)
|
||||||
|
project(espidfcode)
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C5 | ESP32-C6 | ESP32-C61 | ESP32-H2 | ESP32-H21 | ESP32-H4 | ESP32-P4 | ESP32-S2 | ESP32-S3 | Linux |
|
||||||
|
| ----------------- | ----- | -------- | -------- | -------- | -------- | --------- | -------- | --------- | -------- | -------- | -------- | -------- | ----- |
|
||||||
|
|
||||||
|
# Hello World Example
|
||||||
|
|
||||||
|
Starts a FreeRTOS task to print "Hello World".
|
||||||
|
|
||||||
|
(See the README.md file in the upper level 'examples' directory for more information about examples.)
|
||||||
|
|
||||||
|
## How to use example
|
||||||
|
|
||||||
|
Follow detailed instructions provided specifically for this example.
|
||||||
|
|
||||||
|
Select the instructions depending on Espressif chip installed on your development board:
|
||||||
|
|
||||||
|
- [ESP32 Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/stable/get-started/index.html)
|
||||||
|
- [ESP32-S2 Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/get-started/index.html)
|
||||||
|
|
||||||
|
|
||||||
|
## Example folder contents
|
||||||
|
|
||||||
|
The project **hello_world** contains one source file in C language [hello_world_main.c](main/hello_world_main.c). The file is located in folder [main](main).
|
||||||
|
|
||||||
|
ESP-IDF projects are built using CMake. The project build configuration is contained in `CMakeLists.txt` files that provide set of directives and instructions describing the project's source files and targets (executable, library, or both).
|
||||||
|
|
||||||
|
Below is short explanation of remaining files in the project folder.
|
||||||
|
|
||||||
|
```
|
||||||
|
├── CMakeLists.txt
|
||||||
|
├── pytest_hello_world.py Python script used for automated testing
|
||||||
|
├── main
|
||||||
|
│ ├── CMakeLists.txt
|
||||||
|
│ └── hello_world_main.c
|
||||||
|
└── README.md This is the file you are currently reading
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information on structure and contents of ESP-IDF projects, please refer to Section [Build System](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html) of the ESP-IDF Programming Guide.
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
* Program upload failure
|
||||||
|
|
||||||
|
* Hardware connection is not correct: run `idf.py -p PORT monitor`, and reboot your board to see if there are any output logs.
|
||||||
|
* The baud rate for downloading is too high: lower your baud rate in the `menuconfig` menu, and try again.
|
||||||
|
|
||||||
|
## Technical support and feedback
|
||||||
|
|
||||||
|
Please use the following feedback channels:
|
||||||
|
|
||||||
|
* For technical queries, go to the [esp32.com](https://esp32.com/) forum
|
||||||
|
* For a feature request or bug report, create a [GitHub issue](https://github.com/espressif/esp-idf/issues)
|
||||||
|
|
||||||
|
We will get back to you as soon as possible.
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
# 收集当前目录下所有 .c 文件
|
||||||
|
file(GLOB_RECURSE SRC_LIST "*.c")
|
||||||
|
|
||||||
|
idf_component_register(SRCS ${SRC_LIST}
|
||||||
|
PRIV_REQUIRES spi_flash esp_driver_spi esp_driver_gpio
|
||||||
|
INCLUDE_DIRS "")
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#include "spi.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "driver/spi_master.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
#define VSPI_MISO -1 //接收引脚不使用,仅发送
|
||||||
|
#define VSPI_MOSI 3
|
||||||
|
#define VSPI_SCLK 2
|
||||||
|
|
||||||
|
#define LCD_CS 7
|
||||||
|
#define LCD_DS 6
|
||||||
|
|
||||||
|
static const char *TAG = "SPI_2";
|
||||||
|
|
||||||
|
spi_device_handle_t lcd_spi;
|
||||||
|
|
||||||
|
void spi_init()
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG,"初始化SPI IO总线");
|
||||||
|
esp_err_t ret;
|
||||||
|
|
||||||
|
// 1. SPI 总线配置
|
||||||
|
spi_bus_config_t buscfg = {
|
||||||
|
.miso_io_num = VSPI_MISO, // MISO 引脚
|
||||||
|
.mosi_io_num = VSPI_MOSI, // MOSI 引脚
|
||||||
|
.sclk_io_num = VSPI_SCLK, // 时钟引脚
|
||||||
|
.quadwp_io_num = -1, // 不使用 QWP
|
||||||
|
.quadhd_io_num = -1, // 不使用 QHD
|
||||||
|
.max_transfer_sz = 4096, // 最大传输大小
|
||||||
|
};
|
||||||
|
|
||||||
|
// 2. 初始化 SPI 总线
|
||||||
|
ret = spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO);
|
||||||
|
if (ret != ESP_OK) {
|
||||||
|
ESP_LOGE(TAG, "SPI2 IO总线初始化失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ESP_LOGI(TAG,"SPI IO总线初始化成功");
|
||||||
|
|
||||||
|
ESP_LOGI(TAG,"挂载设备片选IO");
|
||||||
|
|
||||||
|
spi_device_interface_config_t devcfg = {
|
||||||
|
.mode = 0, // SPI 模式 0
|
||||||
|
.clock_speed_hz = 80 * 1000 * 1000, //
|
||||||
|
.spics_io_num = LCD_CS,
|
||||||
|
.queue_size = 7, // 队列深度
|
||||||
|
.command_bits = 8, // 命令 8 位
|
||||||
|
.address_bits = 8,
|
||||||
|
};
|
||||||
|
|
||||||
|
ret = spi_bus_add_device(SPI2_HOST, &devcfg, &lcd_spi);
|
||||||
|
if (ret != ESP_OK) {
|
||||||
|
ESP_LOGE(TAG, "挂载设备片选IO失败");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef SPI_H
|
||||||
|
#define SPI_H
|
||||||
|
|
||||||
|
void spi_init();
|
||||||
|
|
||||||
|
#endif /* SPI_H */
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2010-2022 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: CC0-1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "esp_chip_info.h"
|
||||||
|
#include "esp_flash.h"
|
||||||
|
#include "esp_system.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
|
||||||
|
#include "spi.h"
|
||||||
|
|
||||||
|
static const char *TAG = "SYS";
|
||||||
|
|
||||||
|
void app_main(void)
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG,"Hello world!\n");
|
||||||
|
|
||||||
|
/* Print chip information */
|
||||||
|
esp_chip_info_t chip_info;
|
||||||
|
uint32_t flash_size;
|
||||||
|
esp_chip_info(&chip_info);
|
||||||
|
ESP_LOGI(TAG,"This is %s chip with %d CPU core(s), %s%s%s%s, ",
|
||||||
|
CONFIG_IDF_TARGET,
|
||||||
|
chip_info.cores,
|
||||||
|
(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
|
||||||
|
(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
|
||||||
|
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
|
||||||
|
(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");
|
||||||
|
|
||||||
|
unsigned major_rev = chip_info.revision / 100;
|
||||||
|
unsigned minor_rev = chip_info.revision % 100;
|
||||||
|
ESP_LOGI(TAG,"silicon revision v%d.%d, ", major_rev, minor_rev);
|
||||||
|
if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
|
||||||
|
ESP_LOGE(TAG,"Get flash size failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ESP_LOGI(TAG,"%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
|
||||||
|
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
|
||||||
|
|
||||||
|
ESP_LOGI(TAG,"Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());
|
||||||
|
|
||||||
|
ESP_LOGI(TAG,"复位原因: %d\n", esp_reset_reason());
|
||||||
|
|
||||||
|
spi_init();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
|
||||||
|
vTaskDelay(1); // 必须让出CPU
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
import hashlib
|
||||||
|
import logging
|
||||||
|
from typing import Callable
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from pytest_embedded_idf.dut import IdfDut
|
||||||
|
from pytest_embedded_idf.utils import idf_parametrize
|
||||||
|
from pytest_embedded_qemu.app import QemuApp
|
||||||
|
from pytest_embedded_qemu.dut import QemuDut
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.generic
|
||||||
|
@idf_parametrize('target', ['supported_targets', 'preview_targets'], indirect=['target'])
|
||||||
|
def test_hello_world(dut: IdfDut, log_minimum_free_heap_size: Callable[..., None]) -> None:
|
||||||
|
dut.expect('Hello world!')
|
||||||
|
log_minimum_free_heap_size()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.host_test
|
||||||
|
@idf_parametrize('target', ['linux'], indirect=['target'])
|
||||||
|
def test_hello_world_linux(dut: IdfDut) -> None:
|
||||||
|
dut.expect('Hello world!')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.host_test
|
||||||
|
@pytest.mark.macos_shell
|
||||||
|
@idf_parametrize('target', ['linux'], indirect=['target'])
|
||||||
|
def test_hello_world_macos(dut: IdfDut) -> None:
|
||||||
|
dut.expect('Hello world!')
|
||||||
|
|
||||||
|
|
||||||
|
def verify_elf_sha256_embedding(app: QemuApp, sha256_reported: str) -> None:
|
||||||
|
sha256 = hashlib.sha256()
|
||||||
|
with open(app.elf_file, 'rb') as f:
|
||||||
|
sha256.update(f.read())
|
||||||
|
sha256_expected = sha256.hexdigest()
|
||||||
|
|
||||||
|
logging.info(f'ELF file SHA256: {sha256_expected}')
|
||||||
|
logging.info(f'ELF file SHA256 (reported by the app): {sha256_reported}')
|
||||||
|
|
||||||
|
# the app reports only the first several hex characters of the SHA256, check that they match
|
||||||
|
if not sha256_expected.startswith(sha256_reported):
|
||||||
|
raise ValueError('ELF file SHA256 mismatch')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.host_test
|
||||||
|
@pytest.mark.qemu
|
||||||
|
@idf_parametrize('target', ['esp32', 'esp32c3'], indirect=['target'])
|
||||||
|
def test_hello_world_host(app: QemuApp, dut: QemuDut) -> None:
|
||||||
|
sha256_reported = dut.expect(r'ELF file SHA256:\s+([a-f0-9]+)').group(1).decode('utf-8')
|
||||||
|
verify_elf_sha256_embedding(app, sha256_reported)
|
||||||
|
|
||||||
|
dut.expect('Hello world!')
|
||||||
@@ -1 +1,2 @@
|
|||||||
[1217/195831.250:ERROR:gpu\command_buffer\service\shared_image\shared_image_manager.cc:401] SharedImageManager::ProduceSkia: Trying to Produce a Skia representation from a non-existent mailbox.
|
[1217/195831.250:ERROR:gpu\command_buffer\service\shared_image\shared_image_manager.cc:401] SharedImageManager::ProduceSkia: Trying to Produce a Skia representation from a non-existent mailbox.
|
||||||
|
[1230/230046.279:ERROR:ui\gl\direct_composition_support.cc:615] AMD VideoProcessorGetOutputExtension failed: The parameter is incorrect. (0x80070057)
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
preview-build
|
||||||
|
preview-bin
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# This basic file is used to compile the runtime for the Editor preview.
|
||||||
|
# It is also intended for you to customize it for your own target/project.
|
||||||
|
|
||||||
|
# Only set project if this is the top-level CMakeLists.txt
|
||||||
|
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||||
|
cmake_minimum_required(VERSION 3.10)
|
||||||
|
# can be customized
|
||||||
|
project(LVGLProject)
|
||||||
|
set(IS_TOP_LEVEL TRUE)
|
||||||
|
else()
|
||||||
|
set(IS_TOP_LEVEL FALSE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# This includes the generated list of .c files
|
||||||
|
include(${CMAKE_CURRENT_LIST_DIR}/file_list_gen.cmake)
|
||||||
|
|
||||||
|
# Create the UI sources as a library
|
||||||
|
add_library(lib-ui ${PROJECT_SOURCES})
|
||||||
|
|
||||||
|
# Add the root project folder as include folder
|
||||||
|
target_include_directories(lib-ui PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
|
||||||
|
# You may use this check to add configuration when compiling for the Editor preview,
|
||||||
|
# or for your target.
|
||||||
|
if (LV_EDITOR_PREVIEW)
|
||||||
|
# things for the Preview
|
||||||
|
else ()
|
||||||
|
# things for your target
|
||||||
|
|
||||||
|
# set your include directories here, don't forget LVGL!
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (IS_TOP_LEVEL)
|
||||||
|
# Do something when this is your top level cmakelists.txt
|
||||||
|
else()
|
||||||
|
# Do something else if it's not your top level cmakelists.txt
|
||||||
|
endif()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Create XML files here that start with a `<component>` tag
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Place ttf or woff files here
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<globals>
|
||||||
|
<api>
|
||||||
|
<!-- Add <enumdefs> here -->
|
||||||
|
</api>
|
||||||
|
|
||||||
|
<consts>
|
||||||
|
<!-- Add <px>, <int>, <color> etc here -->
|
||||||
|
</consts>
|
||||||
|
|
||||||
|
<styles>
|
||||||
|
<!-- Add <style> tags here -->
|
||||||
|
</styles>
|
||||||
|
|
||||||
|
<subjects>
|
||||||
|
<!-- Add <int>, <string>, or <float> subjects here -->
|
||||||
|
</subjects>
|
||||||
|
|
||||||
|
<images>
|
||||||
|
<!-- Add <file> or <data> tags here -->
|
||||||
|
</images>
|
||||||
|
|
||||||
|
<fonts>
|
||||||
|
<!-- Add <bin> , <tiny_ttf>, <freetype> tags here -->
|
||||||
|
</fonts>
|
||||||
|
</globals>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Place PNG images here
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
<project>
|
||||||
|
<targets>
|
||||||
|
<target name="target1">
|
||||||
|
<display width="320" height="240"/>
|
||||||
|
</target>
|
||||||
|
</targets>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Create XML files here that start with a `<screen>` tag
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Create folders here for each widget and place an XML in each with a `<widget>` tag
|
||||||
Reference in New Issue
Block a user