diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..b707d0f6 --- /dev/null +++ b/.clang-format @@ -0,0 +1,96 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: true +AlignConsecutiveDeclarations: false +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BreakBeforeBraces: Custom +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: true + BeforeCatch: false + BeforeElse: false + IndentBraces: false + SplitEmptyFunction: false +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^ IWYU pragma:' +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '$' +IndentCaseLabels: true +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Middle +ReflowComments: true +SortIncludes: false +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeParens: Never +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +TabWidth: 4 +UseTab: Never +... diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..bec9bbd9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +## OS specific ######## +.DS_Store + +## Project files ###### +.git +.pio +data/* +src/user_config_override.h + +## Visual Studio Code specific ###### +.vscode +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +*.bak \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..7c486f18 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,67 @@ +# Continuous Integration (CI) is the practice, in software +# engineering, of merging all developer working copies with a shared mainline +# several times a day < https://docs.platformio.org/page/ci/index.html > +# +# Documentation: +# +# * Travis CI Embedded Builds with PlatformIO +# < https://docs.travis-ci.com/user/integration/platformio/ > +# +# * PlatformIO integration with Travis CI +# < https://docs.platformio.org/page/ci/travis.html > +# +# * User Guide for `platformio ci` command +# < https://docs.platformio.org/page/userguide/cmd_ci.html > +# +# +# Please choose one of the following templates (proposed below) and uncomment +# it (remove "# " before each line) or use own configuration according to the +# Travis CI documentation (see above). +# + + +# +# Template #1: General project. Test it using existing `platformio.ini`. +# + +# language: python +# python: +# - "2.7" +# +# sudo: false +# cache: +# directories: +# - "~/.platformio" +# +# install: +# - pip install -U platformio +# - platformio update +# +# script: +# - platformio run + + +# +# Template #2: The project is intended to be used as a library with examples. +# + +# language: python +# python: +# - "2.7" +# +# sudo: false +# cache: +# directories: +# - "~/.platformio" +# +# env: +# - PLATFORMIO_CI_SRC=path/to/test/file.c +# - PLATFORMIO_CI_SRC=examples/file.ino +# - PLATFORMIO_CI_SRC=path/to/test/directory +# +# install: +# - pip install -U platformio +# - platformio update +# +# script: +# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..470aca85 --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ + _____ _____ _____ _____ + | | | _ | __| _ | + | | |__ | __| + |__|__|__|__|_____|__| + Home Automation Switch Plate +https://github.com/aderusha/HASwitchPlate + +Copyright (c) 2019 Allen Derusha allen@derusha.org +Copyright (c) 2020 Francis Van Roie francis@netwize.be + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this hardware, +software, and associated documentation files (the "Product"), to deal in the Product without +restriction, including without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Product, and to permit persons to whom the +Product is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Product. + +THE PRODUCT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE PRODUCT OR THE USE OR OTHER DEALINGS IN THE PRODUCT. diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 00000000..945c0cd5 --- /dev/null +++ b/platformio.ini @@ -0,0 +1,225 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; http://docs.platformio.org/page/projectconf.html + + +;*************************************************** +; Common settings +;*************************************************** +[platformio] +default_envs = + esp32dev + esp12e + d1mini-lolintft24 + +include_dir = + include + ;lvgl + ;lv_lib_zifont + ;png_decoder + +[lcd] +TFT_WIDTH = 240 +TFT_HEIGHT = 320 +TFT_ROTATION = 0 ; 0=0, 1=90, 2=180 or 3=270 degree +; Rotation params: +; 0 - 0 deg +; 1 - 90 deg anti-clockwise (from 0 deg) +; 2 - 180 deg anti-clockwise +; 3 - 270 deg anti-clockwise +; 4 - mirror content, and rotate 180 deg anti-clockwise +; 5 - mirror content, and rotate 270 deg anti-clockwise +; 6 - mirror content, and rotate 0 deg anti-clockwise +; 7 - mirror content, and rotate 90 deg anti-clockwise + +[env] +framework = arduino +monitor_speed = 115200 +upload_speed = 921600 +; -- Shared library dependencies in all environments +lib_deps = + ;lvgl@^7.0.0 + TFT_eSPI@^1.5.0 + PubSubClient@^2.7.0 ; MQTT client + ArduinoJson@>6.13.0 + Syslog@^2.0.0 + +; -- littlevgl config options ---------------------- +build_flags = + -Os ; Code Size Optimization + -w ; Suppress warnings + -D LV_CONF_INCLUDE_SIMPLE + -D SPIFFS_TEMPORAL_FD_CACHE ; speed up opening recent files + -D ARDUINOJSON_DECODE_UNICODE=1 ; for utf-8 symbols + -D ARDUINOJSON_ENABLE_PROGMEM=1 ; for PROGMEM arguments + -I include ; include lv_conf.h and hasp_conf.h +; -I drivers/stm32f429_disco + +;*************************************************** +; ESP32 build +;*************************************************** +[env:esp32dev] +platform = espressif32 +board = esp32dev +upload_port = COM3 ; Change to the correct port +monitor_port = COM3 ; Change to the correct port + +build_flags = + ${env.build_flags} +; -- TFT_eSPI build options ------------------------ + -D TFT_ROTATION=${lcd.TFT_ROTATION} + -D TFT_WIDTH=${lcd.TFT_WIDTH} + -D TFT_HEIGHT=${lcd.TFT_HEIGHT} + -D USER_SETUP_LOADED=1 + -D ILI9341_DRIVER=1 + -D TFT_MISO=19 + -D TFT_MOSI=23 + -D TFT_SCLK=18 + -D TFT_CS=5 + -D TFT_DC=2 + -D TFT_RST=4 + -D TOUCH_CS=21 + -D SPI_FREQUENCY=40000000 + -D SPI_TOUCH_FREQUENCY=2500000 + -D SPI_READ_FREQUENCY=20000000 +; -- Debugging options ----------------------------- +; -D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG + +; -- Library options ------------------------------- +lib_deps = + ${env.lib_deps} + +src_filter = +<*> +<../drivers/stm32f429_disco> + +;*************************************************** +; D1 Mini with Lolin TFT 2.4" +;*************************************************** +[env:d1mini-lolintft24] +platform = espressif8266 ;@2.2.3 +board = d1_mini +upload_port = COM4 ; Change to the correct port +monitor_port = COM4 ; Change to the correct port +board_build.f_flash = 40000000L +board_build.flash_mode = dout +build_flags = + ${env.build_flags} + -Wl,-Teagle.flash.4m3m.ld +; -- TFT_eSPI build options ------------------------ + -D TFT_ROTATION=${lcd.TFT_ROTATION} + -D TFT_WIDTH=${lcd.TFT_WIDTH} + -D TFT_HEIGHT=${lcd.TFT_HEIGHT} + -D USER_SETUP_LOADED + -D ILI9341_DRIVER + -D TFT_MISO=12 ;D6 + -D TFT_MOSI=13 ;D7 + -D TFT_SCLK=14 ;D5 + -D TFT_DC=15 ;D8 + -D TFT_CS=16 ;D0 + -D TFT_BCKL=5 ;D1 + -D TFT_RST=-1 ;RST + -D TOUCH_CS=0 ;D3 (can also be D1 or D4) + -D SPI_FREQUENCY=40000000 + -D SPI_TOUCH_FREQUENCY=2500000 + -D SPI_READ_FREQUENCY=20000000 + -D SUPPORT_TRANSACTIONS + ; BGR color swapped + +;*************************************************** +; ESP-12 build +;*************************************************** +[env:esp12e] +platform = espressif8266 ;@2.2.3 +board = esp12e +monitor_port = COM5 +upload_port = COM5 ; Change to the correct port +board_build.f_flash = 40000000L +board_build.flash_mode = dout +build_flags = + ${env.build_flags} + -Wl,-Teagle.flash.4m3m.ld +; -- TFT_eSPI build options ------------------------ + -D TFT_ROTATION=${lcd.TFT_ROTATION} + -D TFT_WIDTH=${lcd.TFT_WIDTH} + -D TFT_HEIGHT=${lcd.TFT_HEIGHT} + -D USER_SETUP_LOADED=1 + -D ST7735_DRIVER=1 + -D ST7735_BLACKTAB=1 + -D TFT_MISO=-1 ;NC + -D TFT_MOSI=13 ;D7 + -D TFT_SCLK=14 ;D5 + -D TFT_CS=15 ;D8 + -D TFT_DC=0 ;D3 + -D TFT_RST=2 ;D4 + -D TOUCH_CS=-1 ;NC + -D SPI_FREQUENCY=27000000 + +; -- Library options ------------------------------- +lib_deps = + ${env.lib_deps} + Ethernet@<2.0.0 + + +;*************************************************** +; STM32f103 Baite Maple +;*************************************************** +[env:maple] +platform = ststm32 +board = maple +monitor_port = COM6 ; Change to the correct port +upload_port = COM6 ; Change to the correct port +build_flags = + ${env.build_flags} +; -- TFT_eSPI build options ------------------------ + -D TFT_ROTATION=${lcd.TFT_ROTATION} + -D TFT_WIDTH=${lcd.TFT_WIDTH} + -D TFT_HEIGHT=${lcd.TFT_HEIGHT} + -D USER_SETUP_LOADED=1 + -D ST7735_DRIVER=1 + -D ST7735_BLACKTAB=1 + -D TFT_MISO=-1 ;NC + -D TFT_MOSI=13 ;D7 + -D TFT_SCLK=14 ;D5 + -D TFT_CS=15 ;D8 + -D TFT_DC=0 ;D3 + -D TFT_RST=2 ;D4 + -D TOUCH_CS=-1 ;NC + -D SPI_FREQUENCY=27000000 + -I "Arduino.h" + +; -- Library options ------------------------------- +lib_deps = + ${env.lib_deps} + Ethernet@<2.0.0 + + +;*************************************************** +; Native build +;*************************************************** +[env:native] +platform = native +build_flags = + -D LV_CONF_INCLUDE_SIMPLE + ; -I src Required to find lv_conf.h + -I src + -I drivers/sdl2 + -lSDL2 + ; SDL drivers options + -D LV_LVGL_H_INCLUDE_SIMPLE + -D LV_DRV_NO_CONF + -D USE_MONITOR + -D MONITOR_ZOOM=2 + -D USE_MOUSE + -D USE_MOUSEWHEEL + -D USE_KEYBOARD +lib_deps = + ;lvgl=https://github.com/littlevgl/lvgl/archive/master.zip + lvgl@^6.1.0 + ;lv_drivers=https://github.com/littlevgl/lv_drivers/archive/master.zip + lv_drivers@^6.0.2 +src_filter = +<*> +<../drivers/sdl2>