diff --git a/.clang-format b/.clang-format
new file mode 100644
index 0000000..c8921f4
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,174 @@
+---
+# 语言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
+Language: Cpp
+# BasedOnStyle: LLVM
+# 访问说明符(public、private等)的偏移
+AccessModifierOffset: -4
+# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
+AlignAfterOpenBracket: Align
+# 连续赋值时,对齐所有等号
+AlignConsecutiveAssignments: true
+# 连续声明时,对齐所有声明的变量名
+AlignConsecutiveDeclarations: true
+# 左对齐逃脱换行(使用反斜杠换行)的反斜杠
+AlignEscapedNewlinesLeft: true
+# 水平对齐二元和三元表达式的操作数
+AlignOperands: true
+# 对齐连续的尾随的注释
+AlignTrailingComments: true
+# 允许函数声明的所有参数在放在下一行
+AllowAllParametersOfDeclarationOnNextLine: true
+# 允许短的块放在同一行
+AllowShortBlocksOnASingleLine: false
+# 允许短的case标签放在同一行
+AllowShortCaseLabelsOnASingleLine: false
+# 允许短的函数放在同一行: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All
+AllowShortFunctionsOnASingleLine: None
+# 允许短的if语句保持在同一行
+AllowShortIfStatementsOnASingleLine: false
+# 允许短的循环保持在同一行
+AllowShortLoopsOnASingleLine: false
+# 总是在定义返回类型后换行(deprecated)
+AlwaysBreakAfterDefinitionReturnType: None
+# 总是在返回类型后换行: None, All, TopLevel(顶级函数,不包括在类中的函数),
+# AllDefinitions(所有的定义,不包括声明), TopLevelDefinitions(所有的顶级函数的定义)
+AlwaysBreakAfterReturnType: None
+# 总是在多行string字面量前换行
+AlwaysBreakBeforeMultilineStrings: false
+# 总是在template声明后换行
+AlwaysBreakTemplateDeclarations: false
+# false表示函数实参要么都在同一行,要么都各自一行
+BinPackArguments: true
+# false表示所有形参要么都在同一行,要么都各自一行
+BinPackParameters: true
+# 大括号换行,只有当BreakBeforeBraces设置为Custom时才有效
+BraceWrapping:
+ # class定义后面
+ AfterClass: true
+ # 控制语句后面
+ AfterControlStatement: false
+ # enum定义后面
+ AfterEnum: true
+ # 函数定义后面
+ AfterFunction: true
+ # 命名空间定义后面
+ AfterNamespace: true
+ # ObjC定义后面
+ AfterObjCDeclaration: false
+ # struct定义后面
+ AfterStruct: true
+ # union定义后面
+ AfterUnion: false
+ # catch之前
+ BeforeCatch: true
+ # else之前
+ BeforeElse: false
+ # 缩进大括号
+ IndentBraces: false
+# 在二元运算符前换行: None(在操作符后换行), NonAssignment(在非赋值的操作符前换行), All(在操作符前换行)
+BreakBeforeBinaryOperators: NonAssignment
+# 在大括号前换行: Attach(始终将大括号附加到周围的上下文), Linux(除函数、命名空间和类定义,与Attach类似),
+# Mozilla(除枚举、函数、记录定义,与Attach类似), Stroustrup(除函数定义、catch、else,与Attach类似),
+# Allman(总是在大括号前换行), GNU(总是在大括号前换行,并对于控制语句的大括号增加额外的缩进), WebKit(在函数前换行), Custom
+# 注:这里认为语句块也属于函数
+BreakBeforeBraces: Custom
+# 在三元运算符前换行
+BreakBeforeTernaryOperators: true
+# 在构造函数的初始化列表的逗号前换行
+BreakConstructorInitializersBeforeComma: false
+# 每行字符的限制,0表示没有限制
+ColumnLimit: 120
+# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多行或以其它方式改变
+CommentPragmas: '^ IWYU pragma:'
+# 构造函数的初始化列表要么都在同一行,要么都各自一行
+ConstructorInitializerAllOnOneLineOrOnePerLine: false
+# 构造函数的初始化列表的缩进宽度
+ConstructorInitializerIndentWidth: 4
+# 延续的行的缩进宽度
+ContinuationIndentWidth: 4
+# 去除C++11的列表初始化的大括号{后和}前的空格
+Cpp11BracedListStyle: false
+# 继承最常用的指针和引用的对齐方式
+DerivePointerAlignment: false
+# 关闭格式化
+DisableFormat: false
+# 自动检测函数的调用和定义是否被格式为每行一个参数(Experimental)
+ExperimentalAutoDetectBinPacking: false
+# 需要被解读为foreach循环而不是函数调用的宏
+ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
+# 对#include进行排序,匹配了某正则表达式的#include拥有对应的优先级,匹配不到的则默认优先级为INT_MAX(优先级越小排序越靠前),
+# 可以定义负数优先级从而保证某些#include永远在最前面
+IncludeCategories:
+ - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
+ Priority: 2
+ - Regex: '^(<|"(gtest|isl|json)/)'
+ Priority: 3
+ - Regex: '.*'
+ Priority: 1
+# 缩进case标签
+IndentCaseLabels: true
+# 缩进宽度
+IndentWidth: 4
+# 函数返回类型换行时,缩进函数声明或函数定义的函数名
+IndentWrappedFunctionNames: false
+# 保留在块开始处的空行
+KeepEmptyLinesAtTheStartOfBlocks: true
+# 开始一个块的宏的正则表达式
+MacroBlockBegin: ''
+# 结束一个块的宏的正则表达式
+MacroBlockEnd: ''
+# 连续空行的最大数量
+MaxEmptyLinesToKeep: 1
+# 命名空间的缩进: None, Inner(缩进嵌套的命名空间中的内容), All
+NamespaceIndentation: Inner
+# 使用ObjC块时缩进宽度
+ObjCBlockIndentWidth: 4
+# 在ObjC的@property后添加一个空格
+ObjCSpaceAfterProperty: false
+# 在ObjC的protocol列表前添加一个空格
+ObjCSpaceBeforeProtocolList: true
+# 在call(后对函数调用换行的penalty
+PenaltyBreakBeforeFirstCallParameter: 19
+# 在一个注释中引入换行的penalty
+PenaltyBreakComment: 300
+# 第一次在<<前换行的penalty
+PenaltyBreakFirstLessLess: 120
+# 在一个字符串字面量中引入换行的penalty
+PenaltyBreakString: 1000
+# 对于每个在行字符数限制之外的字符的penalty
+PenaltyExcessCharacter: 1000000
+# 将函数的返回类型放到它自己的行的penalty
+PenaltyReturnTypeOnItsOwnLine: 60
+# 指针和引用的对齐: Left, Right, Middle
+PointerAlignment: Left
+# 允许重新排版注释
+ReflowComments: false
+# 允许排序#include
+SortIncludes: false
+# 在C风格类型转换后添加空格
+SpaceAfterCStyleCast: false
+# 在赋值运算符之前添加空格
+SpaceBeforeAssignmentOperators: true
+# 开圆括号之前添加一个空格: Never, ControlStatements, Always
+SpaceBeforeParens: ControlStatements
+# 在空的圆括号中添加空格
+SpaceInEmptyParentheses: false
+# 在尾随的评论前添加的空格数(只适用于//)
+SpacesBeforeTrailingComments: 2
+# 在尖括号的<后和>前添加空格
+SpacesInAngles: false
+# 在容器(ObjC和JavaScript的数组和字典等)字面量中添加空格
+SpacesInContainerLiterals: true
+# 在C风格类型转换的括号中添加空格
+SpacesInCStyleCastParentheses: false
+# 在圆括号的(后和)前添加空格
+SpacesInParentheses: false
+# 在方括号的[后和]前添加空格,lamda表达式和未指明大小的数组的声明不受影响
+SpacesInSquareBrackets: false
+# 标准: Cpp03, Cpp11, Auto
+Standard: Cpp11
+# tab宽度
+TabWidth: 4
+# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
+UseTab: Never
+...
diff --git a/main/APP/app_task_display/app_task_display.c b/main/APP/app_task_display/app_task_display.c
new file mode 100644
index 0000000..b495797
--- /dev/null
+++ b/main/APP/app_task_display/app_task_display.c
@@ -0,0 +1,129 @@
+/**
+ * @file app_hello_task.h
+ * @author impressionyang (impressionyang@outlook.com)
+ * @brief
+ * @version 0.1
+ * @date 2022-09-28
+ * _ _
+ * (_)_ _ ___ _______ ___ ___ (_)__ ___ __ _____ ____ ___ _
+ * / / ' \/ _ \/ __/ -_|_-<(_- / _ \/ _ \/ // / _ `/ _ \/ _ `/
+ * /_/_/_/_/ .__/_/ \__/___/___/_/\___/_//_/\_, /\_,_/_//_/\_, /
+ * /_/ /___/ /___/
+ * @copyright Copyright (c) 2022 impressionyang
+ *
+ * @par 修改日志:
+ *
+ * | Date | Version | Author | Description
+ * |
|---|
| 2022-12-22 | v1.0 | impressionyang | 内容
+ * |
+ */
+#include "app_task_display.h"
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "esp_err.h"
+#include "esp_log.h"
+#include "st7789.h"
+#include "CST816T.h"
+
+TFT_t dev;
+
+TickType_t FillTest(TFT_t* dev, int width, int height)
+{
+ TickType_t startTick, endTick, diffTick;
+ startTick = xTaskGetTickCount();
+
+ lcdFillScreen(dev, RED);
+ vTaskDelay(50);
+ lcdFillScreen(dev, GREEN);
+ vTaskDelay(50);
+ lcdFillScreen(dev, BLUE);
+ vTaskDelay(50);
+
+ endTick = xTaskGetTickCount();
+ diffTick = endTick - startTick;
+ ESP_LOGI(__FUNCTION__, "elapsed time[ms]:%d", diffTick * portTICK_PERIOD_MS);
+ return diffTick;
+}
+
+void cst_scan_gesture()
+{
+ int index = 0;
+ while (1) {
+ vTaskDelay(1);
+ if (index++ == 500) {
+ index = 0;
+ lcdBacklightOff(&dev);
+ }
+ if (cst816t_available()) {
+ /*printf("gesture.id %u \n", data.gestureID);
+ printf("points %u \n", data.points);
+ printf("event %u \n", data.event);*/
+ printf("x %i \n", data.x);
+ printf("y %i \n", data.y);
+ lcdBacklightOn(&dev);
+
+ switch (data.gestureID) {
+ case NONE:
+ // printf("NONE");
+ break;
+ case SWIPE_DOWN:
+ printf("SWIPE DOWN \n");
+ break;
+ case SWIPE_UP:
+ printf("SWIPE UP \n");
+ break;
+ case SWIPE_LEFT:
+ printf("SWIPE LEFT \n");
+ break;
+ case SWIPE_RIGHT:
+ printf("SWIPE RIGHT \n");
+ break;
+ case SINGLE_CLICK:
+ printf("SINGLE CLICK \n");
+ break;
+ case DOUBLE_CLICK:
+ printf("DOUBLE CLICK \n");
+ break;
+ case LONG_PRESS:
+ printf("LONG PRESS \n");
+ break;
+ default:
+ printf("UNKNOWN \n");
+ break;
+ }
+ }
+ }
+}
+
+static void _display_thread_entry()
+{
+ while (1) {
+ FillTest(&dev, CONFIG_WIDTH, CONFIG_HEIGHT);
+ vTaskDelay(500);
+ }
+}
+
+uint8_t app_task_display_start()
+{
+ cst816t_begin(34, 33, 35, 36);
+ xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
+ spi_master_init(&dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_CS_GPIO, CONFIG_DC_GPIO, CONFIG_RESET_GPIO,
+ CONFIG_BL_GPIO);
+ // lcdBacklightOn(&dev);
+ // vTaskDelay(1000);
+ lcdInit(&dev, CONFIG_WIDTH, CONFIG_HEIGHT, CONFIG_OFFSETX, CONFIG_OFFSETY);
+ // lcdBacklightOn(&dev);
+ xTaskCreatePinnedToCore(_display_thread_entry, "dsp test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
+
+#if CONFIG_INVERSION
+ // ESP_LOGI(TAG, "Enable Display Inversion");
+ lcdInversionOn(&dev);
+#endif
+
+ return 0;
+}
+
+uint8_t app_task_display_stop()
+{
+ return 0;
+}
diff --git a/main/APP/app_task_display/app_task_display.h b/main/APP/app_task_display/app_task_display.h
new file mode 100644
index 0000000..37337a7
--- /dev/null
+++ b/main/APP/app_task_display/app_task_display.h
@@ -0,0 +1,51 @@
+/**
+ * @file app_hello_task.h
+ * @author impressionyang (impressionyang@outlook.com)
+ * @brief
+ * @version 0.1
+ * @date 2022-09-28
+ * _ _
+ * (_)_ _ ___ _______ ___ ___ (_)__ ___ __ _____ ____ ___ _
+ * / / ' \/ _ \/ __/ -_|_-<(_- / _ \/ _ \/ // / _ `/ _ \/ _ `/
+ * /_/_/_/_/ .__/_/ \__/___/___/_/\___/_//_/\_, /\_,_/_//_/\_, /
+ * /_/ /___/ /___/
+ * @copyright Copyright (c) 2022 impressionyang
+ *
+ * @par 修改日志:
+ *
+ * | Date | Version | Author | Description
+ * |
|---|
| 2022-12-22 | v1.0 | impressionyang | 内容
+ * |
+ */
+#ifndef __APP_TASK_DISPLAY_H__
+#define __APP_TASK_DISPLAY_H__
+#include
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ *
+ * @brief
+ * @author impressionyang (impressionyang@outlook.com)
+ * @return uint8_t
+ *
+ * @details
+ */
+uint8_t app_task_display_start();
+
+/**
+ *
+ * @brief
+ * @author impressionyang (impressionyang@outlook.com)
+ * @return uint8_t
+ *
+ * @details
+ */
+uint8_t app_task_display_stop();
+
+#ifdef __cplusplus
+}
+#endif
+#endif//__APP_TASK_DISPLAY_H__
\ No newline at end of file
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt
index 985efda..76ae7a0 100644
--- a/main/CMakeLists.txt
+++ b/main/CMakeLists.txt
@@ -6,6 +6,7 @@ idf_component_register(
SRC_DIRS
"."
"APP/app_task_hello"
+ "APP/app_task_display"
# "APP/app_task_wifi"
# "APP/app_task_mqtt"
# "APP/app_task_sensors"
@@ -20,6 +21,7 @@ idf_component_register(
INCLUDE_DIRS
"."
"APP/app_task_hello"
+ "APP/app_task_display"
# "APP/app_task_wifi"
# "APP/app_task_mqtt"
# "APP/app_task_sensors"
diff --git a/main/app_main.c b/main/app_main.c
index 4d9114b..9b4f564 100644
--- a/main/app_main.c
+++ b/main/app_main.c
@@ -17,16 +17,16 @@
#include "esp_log.h"
#include "app_task_hello.h"
+#include "app_task_display.h"
// #include "app_task_wifi.h"
// #include "app_task_mqtt.h"
// #include "app_task_sensors.h"
-#include "st7789.h"
-#include "CST816T.h"
+
#include "app_main.h"
#include "shell_port.h"
// #include "msg_queue.h"
-static app_main_handle_t sg_app_main_handle = {0};
+static app_main_handle_t sg_app_main_handle = { 0 };
static void _init_esp()
{
@@ -36,71 +36,7 @@ static void _init_esp()
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
- ESP_ERROR_CHECK( ret );
-}
-
-TickType_t FillTest(TFT_t * dev, int width, int height) {
- TickType_t startTick, endTick, diffTick;
- startTick = xTaskGetTickCount();
-
- lcdFillScreen(dev, RED);
- vTaskDelay(50);
- lcdFillScreen(dev, GREEN);
- vTaskDelay(50);
- lcdFillScreen(dev, BLUE);
- vTaskDelay(50);
-
- endTick = xTaskGetTickCount();
- diffTick = endTick - startTick;
- ESP_LOGI(__FUNCTION__, "elapsed time[ms]:%d",diffTick*portTICK_PERIOD_MS);
- return diffTick;
-}
-
-void cst_scan_gesture()
-{
- while (1)
- {
- vTaskDelay(1);
- if (cst816t_available())
- {
- /*printf("gesture.id %u \n", data.gestureID);
- printf("points %u \n", data.points);
- printf("event %u \n", data.event);*/
- printf("x %i \n", data.x);
- printf("y %i \n", data.y);
-
- switch (data.gestureID)
- {
- case NONE:
- // printf("NONE");
- break;
- case SWIPE_DOWN:
- printf("SWIPE DOWN \n");
- break;
- case SWIPE_UP:
- printf("SWIPE UP \n");
- break;
- case SWIPE_LEFT:
- printf("SWIPE LEFT \n");
- break;
- case SWIPE_RIGHT:
- printf("SWIPE RIGHT \n");
- break;
- case SINGLE_CLICK:
- printf("SINGLE CLICK \n");
- break;
- case DOUBLE_CLICK:
- printf("DOUBLE CLICK \n");
- break;
- case LONG_PRESS:
- printf("LONG PRESS \n");
- break;
- default:
- printf("UNKNOWN \n");
- break;
- }
- }
- }
+ ESP_ERROR_CHECK(ret);
}
void app_main(void)
@@ -112,6 +48,7 @@ void app_main(void)
vTaskDelay(10);
_init_esp();
+ app_task_display_start();
// app_hello_task_start();
// app_task_wifi_start();
// app_task_mqtt_start();
@@ -119,36 +56,16 @@ void app_main(void)
userShellInit();
- cst816t_begin(34, 33, 35, 36);
-
- xTaskCreatePinnedToCore(cst_scan_gesture, "sct test", 4096, NULL, 4, NULL, tskNO_AFFINITY);
-
-
- TFT_t dev;
- spi_master_init(&dev, CONFIG_MOSI_GPIO, CONFIG_SCLK_GPIO, CONFIG_CS_GPIO, CONFIG_DC_GPIO, CONFIG_RESET_GPIO, CONFIG_BL_GPIO);
- // lcdBacklightOn(&dev);
- // vTaskDelay(1000);
- lcdInit(&dev, CONFIG_WIDTH, CONFIG_HEIGHT, CONFIG_OFFSETX, CONFIG_OFFSETY);
- // lcdBacklightOn(&dev);
-
-#if CONFIG_INVERSION
- // ESP_LOGI(TAG, "Enable Display Inversion");
- lcdInversionOn(&dev);
-#endif
-
/* Print chip information */
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
- printf("This is %s chip with %d CPU core(s), WiFi%s%s, ",
- CONFIG_IDF_TARGET,
- chip_info.cores,
- (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "",
- (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");
+ printf("This is %s chip with %d CPU core(s), WiFi%s%s, ", CONFIG_IDF_TARGET, chip_info.cores,
+ (chip_info.features & CHIP_FEATURE_BT) ? "/BT" : "", (chip_info.features & CHIP_FEATURE_BLE) ? "/BLE" : "");
printf("silicon revision %d, ", chip_info.revision);
printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
- (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
+ (chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
printf("Minimum free heap size: %d bytes\n", esp_get_minimum_free_heap_size());
@@ -156,15 +73,12 @@ void app_main(void)
// printf("ret = %d\r\n", ret);
// msg_data_t msg_data = {0};
- for (int i = 10; ; ) {
+ for (int i = 10;;) {
// printf("Restarting in %d seconds...\n", i);
// app_task_wifi_get_info(&wifi_info);
// sg_app_main_handle.have_network = wifi_info.is_wifi_conneted;
- FillTest(&dev, CONFIG_WIDTH, CONFIG_HEIGHT);
+ // FillTest(&dev, CONFIG_WIDTH, CONFIG_HEIGHT);
vTaskDelay(5000 / portTICK_PERIOD_MS);
- // if (!msg_queue_recive_msg("mqtt_task", &msg_data, 100)) {
- // printf("msg queue get data = %d\r\n", msg_data.msg_type);
- // }
}
printf("Restarting now.\n");
fflush(stdout);
@@ -176,17 +90,17 @@ uint8_t app_main_handle_get_nework_state()
return sg_app_main_handle.have_network;
}
-static void _show_build_time(int argc, char **argv)
+static void _show_build_time(int argc, char** argv)
{
printf("build at %s %s\n", __DATE__, __TIME__);
}
-SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), show_build_time, _show_build_time, show the build time);
+SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), show_build_time, _show_build_time,
+ show the build time);
-static void _reboot(int argc, char **argv)
+static void _reboot(int argc, char** argv)
{
esp_restart();
}
-SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), reboot, _reboot, reboot system);
-
+SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0) | SHELL_CMD_TYPE(SHELL_TYPE_CMD_MAIN), reboot, _reboot, reboot system);
diff --git a/main/drivers/st7789/st7789.c b/main/drivers/st7789/st7789.c
index c5cad27..40d9f57 100644
--- a/main/drivers/st7789/st7789.c
+++ b/main/drivers/st7789/st7789.c
@@ -1090,6 +1090,7 @@ void lcdUnsetFontUnderLine(TFT_t * dev) {
void lcdBacklightOff(TFT_t * dev) {
if(dev->_bl >= 0) {
gpio_set_level( dev->_bl, 0 );
+ printf("%s\r\n", __func__);
}
}
diff --git a/sdkconfig.old b/sdkconfig.old
index ba31434..d676400 100644
--- a/sdkconfig.old
+++ b/sdkconfig.old
@@ -149,7 +149,7 @@ CONFIG_GPIO_RANGE_MAX=46
CONFIG_WIDTH=240
CONFIG_HEIGHT=280
CONFIG_OFFSETX=0
-CONFIG_OFFSETY=0
+CONFIG_OFFSETY=20
CONFIG_MOSI_GPIO=11
CONFIG_SCLK_GPIO=12
CONFIG_CS_GPIO=-1