mirror of
https://github.com/olikraus/U8g2_Arduino.git
synced 2026-07-27 20:06:05 +00:00
2.30.1
This commit is contained in:
@@ -8,5 +8,5 @@ Description: https://github.com/olikraus/u8g2/wiki
|
||||
|
||||
Issue Tracker: https://github.com/olikraus/u8g2/issues
|
||||
|
||||
Download (2.29.11): https://github.com/olikraus/U8g2_Arduino/archive/master.zip
|
||||
Download (2.30.1): https://github.com/olikraus/U8g2_Arduino/archive/master.zip
|
||||
|
||||
|
||||
@@ -0,0 +1,372 @@
|
||||
/*
|
||||
|
||||
ButtonEmoticon.ino
|
||||
|
||||
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
||||
|
||||
Copyright (c) 2021, olikraus@gmail.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list
|
||||
of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this
|
||||
list of conditions and the following disclaimer in the documentation and/or other
|
||||
materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <U8g2lib.h>
|
||||
|
||||
#ifdef U8X8_HAVE_HW_SPI
|
||||
#include <SPI.h>
|
||||
#endif
|
||||
#ifdef U8X8_HAVE_HW_I2C
|
||||
#include <Wire.h>
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
U8g2lib Example Overview:
|
||||
Frame Buffer Examples: clearBuffer/sendBuffer. Fast, but may not work with all Arduino boards because of RAM consumption
|
||||
Page Buffer Examples: firstPage/nextPage. Less RAM usage, should work with all Arduino boards.
|
||||
U8x8 Text Only Example: No RAM usage, direct communication with display controller. No graphics, 8x8 Text only.
|
||||
|
||||
This is a page buffer example.
|
||||
*/
|
||||
|
||||
// Please UNCOMMENT one of the contructor lines below
|
||||
// U8g2 Contructor List (Picture Loop Page Buffer)
|
||||
// The complete list is available here: https://github.com/olikraus/u8g2/wiki/u8g2setupcpp
|
||||
// Please update the pin numbers according to your setup. Use U8X8_PIN_NONE if the reset pin is not connected
|
||||
//U8G2_NULL u8g2(U8G2_R0); // null device, a 8x8 pixel display which does nothing
|
||||
//U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 12, /* dc=*/ 4, /* reset=*/ 6); // Arduboy (Production, Kickstarter Edition)
|
||||
//U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
|
||||
//U8G2_SSD1306_128X64_NONAME_1_3W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* reset=*/ 8);
|
||||
//U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SSD1306_128X64_ALT0_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
|
||||
//U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8);
|
||||
//U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
|
||||
//U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 16, /* data=*/ 17, /* reset=*/ U8X8_PIN_NONE); // ESP32 Thing, pure SW emulated I2C
|
||||
//U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 16, /* data=*/ 17); // ESP32 Thing, HW I2C with pin remapping
|
||||
//U8G2_SSD1306_128X64_NONAME_1_6800 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8);
|
||||
//U8G2_SSD1306_128X64_NONAME_1_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8);
|
||||
//U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but maximizes setContrast() range
|
||||
//U8G2_SSD1306_128X64_ALT0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
|
||||
//U8G2_SSD1306_102X64_EA_OLEDS102_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
|
||||
//U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but maximizes setContrast() range
|
||||
//U8G2_SH1106_128X64_WINSTAR_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // same as the NONAME variant, but uses updated SH1106 init sequence
|
||||
//U8G2_SH1106_128X32_VISIONOX_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SH1106_128X32_VISIONOX_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SH1106_72X40_WISE_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SH1107_64X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SH1107_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SH1107_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);
|
||||
//U8G2_SH1107_PIMORONI_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8);
|
||||
//U8G2_SH1107_SEEED_128X128_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SH1107_SEEED_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SH1107_SEEED_96X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SH1108_160X160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SH1122_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h
|
||||
//U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 21, /* data=*/ 20, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather M0 Basic Proto + FeatherWing OLED
|
||||
//U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather ESP8266/32u4 Boards + FeatherWing OLED
|
||||
//U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // Adafruit ESP8266/32u4/ARM Boards + FeatherWing OLED
|
||||
//U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA); // pin remapping with ESP8266 HW I2C
|
||||
//U8G2_SSD1306_128X32_WINSTAR_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ SCL, /* data=*/ SDA); // pin remapping with ESP8266 HW I2C
|
||||
//U8G2_SSD1306_64X48_ER_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // EastRising 0.66" OLED breakout board, Uno: A4=SDA, A5=SCL, 5V powered
|
||||
//U8G2_SSD1306_48X64_WINSTAR_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SSD1306_64X32_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SSD1306_64X32_1F_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SSD1306_96X16_ER_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // EastRising 0.69" OLED
|
||||
//U8G2_SSD1306_72X40_ER_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // EastRising 0.42" OLED
|
||||
//U8G2_SSD1322_NHD_256X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h
|
||||
//U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8G2_16BIT in u8g2.h
|
||||
//U8G2_SSD1322_NHD_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1322_NHD_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1325_NHD_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1325_NHD_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD0323_OS128064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD0323_OS128064_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1326_ER_256X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // experimental driver for ER-OLED018-1
|
||||
//U8G2_SSD1327_SEEED_96X96_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // Seeedstudio Grove OLED 96x96
|
||||
//U8G2_SSD1327_SEEED_96X96_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); // Seeedstudio Grove OLED 96x96
|
||||
//U8G2_SSD1327_EA_W128128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1327_EA_W128128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1327_EA_W128128_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 5, /* data=*/ 4, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_SSD1327_EA_W128128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */
|
||||
//U8G2_SSD1327_MIDAS_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1327_MIDAS_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1327_MIDAS_128X128_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE); /* Uno: A4=SDA, A5=SCL, add "u8g2.setBusClock(400000);" into setup() for speedup if possible */
|
||||
//U8G2_SSD1327_WS_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1327_WS_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1327_VISIONOX_128X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1327_VISIONOX_128X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1329_128X96_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1329_128X96_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1329_96X96_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1329_96X96_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1329_96X96_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ A4, /* dc=*/ A2, /* reset=*/ U8X8_PIN_NONE); // Adafruit Feather 32u4 Basic Proto
|
||||
//U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1305_128X32_NONAME_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1305_128X32_ADAFRUIT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1305_128X32_ADAFRUIT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1305_128X64_ADAFRUIT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1305_128X64_ADAFRUIT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1305_128X64_RAYSTAR_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1305_128X64_RAYSTAR_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1309_128X64_NONAME0_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1309_128X64_NONAME0_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1309_128X64_NONAME2_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1309_128X64_NONAME2_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1316_128X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1316_128X32_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1317_96X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // not tested, not confirmed
|
||||
//U8G2_SSD1317_96X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // not tested, not confirmed
|
||||
//U8G2_SSD1318_128X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1318_128X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1320_160X132_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_SSD1320_160X132_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_LD7032_60X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8); // SW SPI Nano Board
|
||||
//U8G2_LD7032_60X32_1_4W_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE); // NOT TESTED!
|
||||
//U8G2_LD7032_60X32_ALT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* cs=*/ 9, /* dc=*/ 10, /* reset=*/ 8); // SW SPI Nano Board
|
||||
//U8G2_LD7032_60X32_ALT_1_4W_SW_I2C u8g2(U8G2_R0, /* clock=*/ 11, /* data=*/ 12, /* reset=*/ U8X8_PIN_NONE); // NOT TESTED!
|
||||
//U8G2_UC1701_EA_DOGS102_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
U8G2_UC1701_EA_DOGS102_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_PCD8544_84X48_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Nokia 5110 Display
|
||||
//U8G2_PCD8544_84X48_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Nokia 5110 Display
|
||||
//U8G2_PCF8812_96X65_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Could be also PCF8814
|
||||
//U8G2_PCF8812_96X65_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Could be also PCF8814
|
||||
//U8G2_HX1230_96X68_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
|
||||
//U8G2_HX1230_96X68_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_KS0108_128X64_1 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ U8X8_PIN_NONE, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low!
|
||||
//U8G2_KS0108_ERM19264_1 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*dc=*/ 17, /*cs0=*/ 14, /*cs1=*/ 15, /*cs2=*/ 16, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low!
|
||||
//U8G2_HD44102_100X64_1 u8g2(U8G2_R0, 4, 5, 6, 7, 8, 9, 10, 11, /*enable=*/ 2, /*dc=*/ 3, /*cs0=*/ A0, /*cs1=*/ A1, /*cs2=*/ A2, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low!
|
||||
//U8G2_T7932_150X32_1 u8g2(U8G2_R0, 4, 5, 6, 7, 8, 9, 10, 11, /*enable=*/ 2, /*dc=*/ 3, /*cs0=*/ A0, /*cs1=*/ A1, /*cs2=*/ A2, /* reset=*/ U8X8_PIN_NONE); // Set R/W to low!
|
||||
//U8G2_ST7920_192X32_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ U8X8_PIN_NONE, /*dc=*/ 17, /*reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_ST7920_192X32_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_ST7920_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18 /* A4 */, /*cs=*/ U8X8_PIN_NONE, /*dc/rs=*/ 17 /* A3 */, /*reset=*/ 15 /* A1 */); // Remember to set R/W to 0
|
||||
//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 18 /* A4 */ , /* data=*/ 16 /* A2 */, /* CS=*/ 17 /* A3 */, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 10, /* reset=*/ 8);
|
||||
//U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 14, /* data=*/ 13, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS
|
||||
//U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 10, /* reset=*/ 8);
|
||||
//U8G2_ST7920_128X64_1_HW_SPI u8g2(U8G2_R0, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS
|
||||
//U8G2_ST7528_ERC16064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7528_ERC16064_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_64128N_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_64128N_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_EA_DOGM132_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); // DOGM132 Shield
|
||||
//U8G2_ST7565_EA_DOGM132_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE); // DOGM132 Shield
|
||||
//U8G2_ST7565_ZOLEN_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_ZOLEN_128X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_LM6059_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Adafruit ST7565 GLCD
|
||||
//U8G2_ST7565_LM6059_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Adafruit ST7565 GLCD
|
||||
//U8G2_ST7565_KS0713_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // KS0713 controller
|
||||
//U8G2_ST7565_KS0713_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // KS0713 controller
|
||||
//U8G2_ST7565_LX12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_LX12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_ERC12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_ERC12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_ERC12864_ALT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // contrast improved version for ERC12864
|
||||
//U8G2_ST7565_ERC12864_ALT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // contrast improved version for ERC12864
|
||||
//U8G2_ST7565_NHD_C12832_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_NHD_C12832_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_NHD_C12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_NHD_C12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_JLX12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7565_JLX12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_PI_132X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); // Pax Instruments Shield, LCD_BL=6
|
||||
//U8G2_ST7567_PI_132X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8); // Pax Instruments Shield, LCD_BL=6
|
||||
//U8G2_ST7567_JLX12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_JLX12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_OS12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_OS12864_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_ENH_DG128064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_ENH_DG128064_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_ENH_DG128064I_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_ENH_DG128064I_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7567_64X32_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_ST7567_HEM6432_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_ST7571_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7571_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7571_128X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7571_128X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7586S_ERC240160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7586S_YMC240160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST75256_JLX172104_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST75256_JLX172104_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST75256_JLX19296_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST75256_JLX19296_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST75256_JLX256128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_WO256X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_WO256X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 9, /* data=*/ 8, /* cs=*/ 7, /* dc=*/ 6, /* reset=*/ 5); // MKR Zero, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 7, /* dc=*/ 6, /* reset=*/ 5); // MKR Zero, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256160M_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256160M_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256160_ALT_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX256160_ALT_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75256_JLX240160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST75256_JLX240160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST75256_JLX25664_1_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); // Due, 2nd I2C, enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75320_JLX320240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_ST75320_JLX320240_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Uno, Enable U8g2 16 bit mode for this display
|
||||
//U8G2_NT7534_TG12864R_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_NT7534_TG12864R_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_ST7588_JLX12864_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ 5);
|
||||
//U8G2_ST7588_JLX12864_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ 5);
|
||||
//U8G2_IST3020_ERC19264_1_6800 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37, /*enable=*/ 28, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect WR pin with GND
|
||||
//U8G2_IST3020_ERC19264_1_8080 u8g2(U8G2_R0, 44, 43, 42, 41, 40, 39, 38, 37, /*enable=*/ 29, /*cs=*/ 32, /*dc=*/ 30, /*reset=*/ 31); // Connect RD pin with 3.3V
|
||||
//U8G2_IST3020_ERC19264_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_IST7920_128X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Round display
|
||||
//U8G2_IST7920_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Round display
|
||||
//U8G2_LC7981_160X80_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
|
||||
//U8G2_LC7981_160X160_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
|
||||
//U8G2_LC7981_240X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
|
||||
//U8G2_LC7981_240X64_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RW with GND
|
||||
//U8G2_SED1520_122X32_1 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*dc=*/ A0, /*e1=*/ A3, /*e2=*/ A2, /* reset=*/ A4); // Set R/W to low!
|
||||
//U8G2_T6963_240X128_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
|
||||
//U8G2_T6963_256X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
|
||||
//U8G2_T6963_160X80_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
|
||||
//U8G2_T6963_128X64_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
|
||||
//U8G2_T6963_128X64_ALT_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable/wr=*/ 17, /*cs/ce=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect RD with +5V, FS0 and FS1 with GND
|
||||
//U8G2_SED1330_240X128_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0
|
||||
//U8G2_SED1330_240X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E
|
||||
//U8G2_RA8835_NHD_240X128_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // Connect /RD = E with +5V, enable is /WR = RW, FG with GND, 14=Uno Pin A0
|
||||
//U8G2_RA8835_NHD_240X128_1_6800 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 17, /*cs=*/ 14, /*dc=*/ 15, /*reset=*/ 16); // A0 is dc pin, /WR = RW = GND, enable is /RD = E
|
||||
//U8G2_UC1601_128X32_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1601_128X32_1_3W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* reset=*/ 8);
|
||||
//U8G2_UC1601_128X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1604_JLX19264_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1604_JLX19264_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1608_ERC24064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due ERC24064-1 Test Setup
|
||||
//U8G2_UC1608_DEM240064_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due ERC24064-1 Test Setup
|
||||
//U8G2_UC1608_ERC240120_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1608_240X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due ERC24064-1 Test Setup
|
||||
//U8G2_UC1610_EA_DOGXL160_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_UC1610_EA_DOGXL160_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ U8X8_PIN_NONE);
|
||||
//U8G2_UC1611_EA_DOGM240_1_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); // Due, 2nd I2C, DOGM240 Test Board
|
||||
//U8G2_UC1611_EA_DOGM240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due DOGXL240 Test Board
|
||||
//U8G2_UC1611_EA_DOGXL240_1_2ND_HW_I2C u8g2(U8G2_R0, /* reset=*/ 8); // Due, 2nd I2C, DOGXL240 Test Board
|
||||
//U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // SW SPI, Due DOGXL240 Test Board
|
||||
//U8G2_UC1611_EW50850_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 3, /*dc=*/ 16, /*reset=*/ 17); // 240x160, Connect RD/WR1 pin with 3.3V, CS is aktive high
|
||||
//U8G2_UC1611_CG160160_1_8080 u8g2(U8G2_R0, 8, 9, 10, 11, 4, 5, 6, 7, /*enable=*/ 18, /*cs=*/ 3, /*dc=*/ 16, /*reset=*/ 17); // Connect WR1 and CD1 pin with 3.3V, connect CS0 with cs, WR0 with enable, CD with dc
|
||||
//U8G2_UC1611_IDS4073_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8g2 16Bit Mode
|
||||
//U8G2_UC1611_IDS4073_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Enable U8g2 16Bit Mode
|
||||
//U8G2_UC1617_JLX128128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1617_JLX128128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1638_192X96_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1638_192X96_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_UC1638_192X96_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* reset=*/ 8); // u8g2 test board: I2C clock/data is same as SPI, I2C default address is 0x78
|
||||
//U8G2_SSD1606_172X72_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display
|
||||
//U8G2_SSD1607_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // eInk/ePaper Display, original LUT from embedded artists
|
||||
//U8G2_SSD1607_GD_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Good Display
|
||||
//U8G2_SSD1607_WS_200X200_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // Waveshare
|
||||
//U8G2_IL3820_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // WaveShare 2.9 inch eInk/ePaper Display, enable 16 bit mode for this display!
|
||||
//U8G2_IL3820_V2_296X128_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8); // ePaper Display, lesser flickering and faster speed, enable 16 bit mode for this display!
|
||||
//U8G2_LS013B7DH03_128X128_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display
|
||||
//U8G2_LS027B7DH01_400X240_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display, SPI Mode 2
|
||||
//U8G2_LS027B7DH01_M0_400X240_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display, SPI Mode 0
|
||||
//U8G2_LS013B7DH05_144X168_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ U8X8_PIN_NONE, /* reset=*/ 8); // there is no DC line for this display
|
||||
//U8G2_ST7511_AVD_320X240_1_8080 u8g2(U8G2_R0, 13, 11, 2, 3, 4, 5, 6, A4, /*enable/WR=*/ 7, /*cs=*/ 10, /*dc=*/ 9, /*reset=*/ 8); // Enable U8g2 16Bit Mode and connect RD pin with 3.3V/5V
|
||||
//U8G2_S1D15721_240X64_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
//U8G2_S1D15721_240X64_1_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
|
||||
|
||||
|
||||
|
||||
|
||||
// End of constructor list
|
||||
|
||||
|
||||
void setup(void) {
|
||||
|
||||
/* U8g2 Project: SSD1306 Test Board */
|
||||
//pinMode(10, OUTPUT);
|
||||
//pinMode(9, OUTPUT);
|
||||
//digitalWrite(10, 0);
|
||||
//digitalWrite(9, 0);
|
||||
|
||||
/* U8g2 Project: T6963 Test Board */
|
||||
//pinMode(18, OUTPUT);
|
||||
//digitalWrite(18, 1);
|
||||
|
||||
/* U8g2 Project: KS0108 Test Board */
|
||||
//pinMode(16, OUTPUT);
|
||||
//digitalWrite(16, 0);
|
||||
|
||||
/* U8g2 Project: LC7981 Test Board, connect RW to GND */
|
||||
//pinMode(17, OUTPUT);
|
||||
//digitalWrite(17, 0);
|
||||
|
||||
/* U8g2 Project: Pax Instruments Shield: Enable Backlight */
|
||||
//pinMode(6, OUTPUT);
|
||||
//digitalWrite(6, 0);
|
||||
|
||||
u8g2.begin();
|
||||
}
|
||||
|
||||
uint8_t width = 5;
|
||||
uint8_t width_state = 1;
|
||||
uint8_t border = 0;
|
||||
uint8_t border_state = 1;
|
||||
uint8_t emoticons = 0;
|
||||
uint8_t emoticons_state = 1;
|
||||
uint8_t offset = 0;
|
||||
uint8_t offset_state = 1;
|
||||
|
||||
void wave(uint8_t min, uint8_t max, uint8_t &v, uint8_t &state) {
|
||||
if ( state ) {
|
||||
v++;
|
||||
if ( v >= max )
|
||||
state = 0;
|
||||
} else {
|
||||
v--;
|
||||
if ( v <= min )
|
||||
state = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void loop(void) {
|
||||
u8g2_uint_t x = u8g2.getDisplayWidth()/2;
|
||||
u8g2_uint_t y = u8g2.getDisplayHeight()/2;
|
||||
char text[2] = " ";
|
||||
y += offset>>4;
|
||||
text[0] = (emoticons>>2)+32;
|
||||
u8g2.setFont(u8g2_font_emoticons21_tr);
|
||||
u8g2.firstPage();
|
||||
do {
|
||||
u8g2.drawButtonUTF8(x, y, U8G2_BTN_HCENTER | (border>>2), width, 1, 1, text);
|
||||
} while ( u8g2.nextPage() );
|
||||
delay(30);
|
||||
wave(7, u8g2.getDisplayWidth()/2, width, width_state);
|
||||
wave(0, 3<<2, border, border_state);
|
||||
wave(0, 7<<2, emoticons, emoticons_state);
|
||||
wave(0, 11<<4, offset, offset_state);
|
||||
}
|
||||
|
||||
+3
-1
@@ -258,7 +258,7 @@ https://github.com/olikraus/u8g2 ChangeLog
|
||||
* U8g2 16 Bit Mode enabled by default for ARM and ESP Systems (issue 1222)
|
||||
2021-09-03 v2.29.11 olikraus@gmail.com
|
||||
* Update for getStrWidth/getUTF8Width: The new return value might be little bit larger (issue 1561)
|
||||
* New draw procedure drawButtonUTF8: (issue 1577)
|
||||
* New draw procedure drawButtonUTF8 (issue 1577)
|
||||
* Added vertical mirror option U8G2_MIRROR_VERTICAL for u8g2 (mattnutsch@gmail.com, issue 1474).
|
||||
* Added support for UC1638 based 196x96 display (issue 371)
|
||||
* Added support for HD44102 and T7932 displays (issue 1492)
|
||||
@@ -267,3 +267,5 @@ https://github.com/olikraus/u8g2 ChangeLog
|
||||
* Added support for SSD1306 EA OLEDS102 (issue 1493)
|
||||
* Added support for UC1601 128x64 (issue 1501)
|
||||
* Font Wiki page splitted into four sub-pages to avoid the GitHub 'abuse' message.
|
||||
2021-09-07 v2.30.1 olikraus@gmail.com
|
||||
* Bugfix drawButtonUTF8 (added C++ code, issue 1577)
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
name=U8g2
|
||||
version=2.29.11
|
||||
version=2.30.1
|
||||
author=oliver <olikraus@gmail.com>
|
||||
maintainer=oliver <olikraus@gmail.com>
|
||||
sentence=Monochrome LCD, OLED and eInk Library. Display controller: SSD1305, SSD1306, SSD1309, SSD1316, SSD1320, SSD1322, SSD1325, SSD1327, SSD1329, SSD1606, SSD1607, SH1106, SH1107, SH1108, SH1122, T6963, RA8835, LC7981, PCD8544, PCF8812, HX1230, UC1601, UC1604, UC1608, UC1610, UC1611, UC1617, UC1638, UC1701, ST7511, ST7528, ST7565, ST7567, ST7571, ST7586, ST7588, ST75256, ST75320, NT7534, ST7920, IST3020, IST7920, LD7032, KS0108, KS0713, HD44102, T7932, SED1520, SBN1661, IL3820, MAX7219. Interfaces: I2C, SPI, Parallel.
|
||||
|
||||
+5
-1
@@ -222,7 +222,11 @@ class U8G2 : public Print
|
||||
void drawRFrame(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRFrame(&u8g2, x, y, w, h,r); }
|
||||
void drawBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_DrawBox(&u8g2, x, y, w, h); }
|
||||
void drawRBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRBox(&u8g2, x, y, w, h,r); }
|
||||
|
||||
|
||||
/* u8g2_button.c */
|
||||
void drawButtonUTF8(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text) {
|
||||
u8g2_DrawButtonUTF8(&u8g2, x, y, flags, width, padding_h, padding_v, text); }
|
||||
|
||||
/* u8g2_circle.c */
|
||||
void drawCircle(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawCircle(&u8g2, x0, y0, rad, opt); }
|
||||
void drawDisc(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawDisc(&u8g2, x0, y0, rad, opt); }
|
||||
|
||||
+102
-27
@@ -6,7 +6,7 @@
|
||||
|
||||
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
||||
|
||||
Copyright (c) 2016, olikraus@gmail.com
|
||||
Copyright (c) 2021, olikraus@gmail.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
@@ -80,7 +80,9 @@
|
||||
|
||||
//#define mui_get_fds_char(s) ((uint8_t)(*s))
|
||||
|
||||
|
||||
//#include <stdio.h>
|
||||
//#define MUI_DEBUG(...) printf(__VA_ARGS__)
|
||||
#define MUI_DEBUG(...)
|
||||
|
||||
uint8_t mui_get_fds_char(fds_t *s)
|
||||
{
|
||||
@@ -92,8 +94,8 @@ uint8_t mui_get_fds_char(fds_t *s)
|
||||
/*
|
||||
s must point to a valid command within FDS
|
||||
*/
|
||||
static size_t mui_fds_get_cmd_size_without_text(mui_t *ui, fds_t *s) MUI_NOINLINE;
|
||||
static size_t mui_fds_get_cmd_size_without_text(mui_t *ui, fds_t *s)
|
||||
static size_t mui_fds_get_cmd_size_without_text(fds_t *s) MUI_NOINLINE;
|
||||
static size_t mui_fds_get_cmd_size_without_text(fds_t *s)
|
||||
{
|
||||
uint8_t c = mui_get_fds_char(s);
|
||||
c &= 0xdf; /* consider upper and lower case */
|
||||
@@ -180,7 +182,7 @@ static size_t mui_fds_parse_text(mui_t *ui, fds_t *s)
|
||||
uint8_t mui_fds_first_token(mui_t *ui)
|
||||
{
|
||||
ui->token = ui->fds;
|
||||
ui->token += mui_fds_get_cmd_size_without_text(ui, ui->fds);
|
||||
ui->token += mui_fds_get_cmd_size_without_text(ui->fds);
|
||||
ui->delimiter = mui_get_fds_char(ui->token);
|
||||
ui->token++; // place ui->token on the first char of the token
|
||||
return mui_fds_next_token(ui);
|
||||
@@ -271,7 +273,7 @@ uint8_t mui_fds_get_token_cnt(mui_t *ui)
|
||||
static size_t mui_fds_get_cmd_size(mui_t *ui, fds_t *s) MUI_NOINLINE;
|
||||
static size_t mui_fds_get_cmd_size(mui_t *ui, fds_t *s)
|
||||
{
|
||||
size_t l = mui_fds_get_cmd_size_without_text(ui, s);
|
||||
size_t l = mui_fds_get_cmd_size_without_text(s);
|
||||
uint8_t c = mui_get_fds_char(s);
|
||||
ui->text[0] = '\0' ; /* always reset the text buffer */
|
||||
if ( mui_fds_is_text(c) )
|
||||
@@ -298,7 +300,7 @@ void mui_Init(mui_t *ui, void *graphics_data, fds_t *fds, muif_t *muif_tlist, si
|
||||
|
||||
int mui_find_uif(mui_t *ui, uint8_t id0, uint8_t id1)
|
||||
{
|
||||
int i;
|
||||
size_t i;
|
||||
for( i = 0; i < ui->muif_tcnt; i++ )
|
||||
{
|
||||
/*
|
||||
@@ -321,7 +323,8 @@ int mui_find_uif(mui_t *ui, uint8_t id0, uint8_t id1)
|
||||
will return 1 if the field id was found.
|
||||
will return 0 if the field id was not found in uif or if ui->fds points to something else than a field
|
||||
*/
|
||||
uint8_t mui_prepare_current_field(mui_t *ui)
|
||||
static uint8_t mui_prepare_current_field(mui_t *ui) MUI_NOINLINE;
|
||||
static uint8_t mui_prepare_current_field(mui_t *ui)
|
||||
{
|
||||
int muif_tidx;
|
||||
|
||||
@@ -338,7 +341,7 @@ uint8_t mui_prepare_current_field(mui_t *ui)
|
||||
|
||||
/* get the command and check whether end of form is reached */
|
||||
ui->cmd = mui_get_fds_char(ui->fds);
|
||||
//printf("mui_prepare_current_field cmd='%c'\n", ui->cmd);
|
||||
//printf("mui_prepare_current_field cmd='%c' len=%d\n", ui->cmd, ui->len);
|
||||
|
||||
/* Copy the cmd also to second id value. This is required for some commands, others will overwrite this below */
|
||||
ui->id1 = ui->cmd;
|
||||
@@ -384,6 +387,9 @@ uint8_t mui_prepare_current_field(mui_t *ui)
|
||||
ui->arg = mui_get_fds_char(ui->fds+3);
|
||||
}
|
||||
}
|
||||
|
||||
//MUI_DEBUG("mui_prepare_current_field cmd='%c' len=%d arg=%d\n", ui->cmd, ui->len, ui->arg);
|
||||
|
||||
|
||||
/* find the field */
|
||||
muif_tidx = mui_find_uif(ui, ui->id0, ui->id1);
|
||||
@@ -404,10 +410,12 @@ uint8_t mui_prepare_current_field(mui_t *ui)
|
||||
|
||||
*/
|
||||
|
||||
void mui_inner_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui)) MUI_NOINLINE;
|
||||
void mui_inner_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui))
|
||||
static void mui_inner_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui)) MUI_NOINLINE;
|
||||
static void mui_inner_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui))
|
||||
{
|
||||
uint8_t cmd;
|
||||
|
||||
//MUI_DEBUG("mui_inner_loop_over_form start %p\n", task);
|
||||
|
||||
ui->fds += mui_fds_get_cmd_size(ui, ui->fds); // skip the first entry, it is U always
|
||||
for(;;)
|
||||
@@ -419,13 +427,18 @@ void mui_inner_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui))
|
||||
break;
|
||||
if ( mui_prepare_current_field(ui) )
|
||||
if ( task(ui) ) /* call the task, which was provided as argument to this function */
|
||||
{
|
||||
//MUI_DEBUG("mui_inner_loop_over_form break by task\n");
|
||||
break;
|
||||
}
|
||||
ui->fds += ui->len;
|
||||
}
|
||||
//printf("mui_loop_over_form ended\n");
|
||||
|
||||
//MUI_DEBUG("mui_inner_loop_over_form end %p\n", task);
|
||||
}
|
||||
|
||||
void mui_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui))
|
||||
static void mui_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui)) MUI_NOINLINE;
|
||||
static void mui_loop_over_form(mui_t *ui, uint8_t (*task)(mui_t *ui))
|
||||
{
|
||||
if ( mui_IsFormActive(ui) == 0 )
|
||||
return;
|
||||
@@ -486,10 +499,20 @@ uint8_t mui_task_form_end(mui_t *ui)
|
||||
return 0; /* continue with the loop */
|
||||
}
|
||||
|
||||
static uint8_t mui_uif_is_cursor_selectable(mui_t *ui) MUI_NOINLINE;
|
||||
static uint8_t mui_uif_is_cursor_selectable(mui_t *ui)
|
||||
{
|
||||
if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t mui_task_find_prev_cursor_uif(mui_t *ui)
|
||||
{
|
||||
if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
//if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
if ( mui_uif_is_cursor_selectable(ui) )
|
||||
{
|
||||
if ( ui->fds == ui->cursor_focus_fds )
|
||||
{
|
||||
@@ -503,7 +526,8 @@ uint8_t mui_task_find_prev_cursor_uif(mui_t *ui)
|
||||
|
||||
uint8_t mui_task_find_first_cursor_uif(mui_t *ui)
|
||||
{
|
||||
if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
//if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
if ( mui_uif_is_cursor_selectable(ui) )
|
||||
{
|
||||
// if ( ui->target_fds == NULL )
|
||||
// {
|
||||
@@ -516,7 +540,8 @@ uint8_t mui_task_find_first_cursor_uif(mui_t *ui)
|
||||
|
||||
uint8_t mui_task_find_last_cursor_uif(mui_t *ui)
|
||||
{
|
||||
if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
//if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
if ( mui_uif_is_cursor_selectable(ui) )
|
||||
{
|
||||
//ui->cursor_focus_position++;
|
||||
ui->target_fds = ui->fds;
|
||||
@@ -526,7 +551,8 @@ uint8_t mui_task_find_last_cursor_uif(mui_t *ui)
|
||||
|
||||
uint8_t mui_task_find_next_cursor_uif(mui_t *ui)
|
||||
{
|
||||
if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
//if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
if ( mui_uif_is_cursor_selectable(ui) )
|
||||
{
|
||||
if ( ui->tmp_fds != NULL )
|
||||
{
|
||||
@@ -544,7 +570,8 @@ uint8_t mui_task_find_next_cursor_uif(mui_t *ui)
|
||||
|
||||
uint8_t mui_task_get_current_cursor_focus_position(mui_t *ui)
|
||||
{
|
||||
if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
//if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
if ( mui_uif_is_cursor_selectable(ui) )
|
||||
{
|
||||
if ( ui->fds == ui->cursor_focus_fds )
|
||||
return 1; /* stop looping */
|
||||
@@ -553,9 +580,10 @@ uint8_t mui_task_get_current_cursor_focus_position(mui_t *ui)
|
||||
return 0; /* continue with the loop */
|
||||
}
|
||||
|
||||
uint8_t mui_task_read_nth_seleectable_field(mui_t *ui)
|
||||
uint8_t mui_task_read_nth_selectable_field(mui_t *ui)
|
||||
{
|
||||
if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
//if ( muif_get_cflags(ui->uif) & MUIF_CFLAG_IS_CURSOR_SELECTABLE )
|
||||
if ( mui_uif_is_cursor_selectable(ui) )
|
||||
{
|
||||
if ( ui->tmp8 == 0 )
|
||||
return 1; /* stop looping */
|
||||
@@ -567,14 +595,16 @@ uint8_t mui_task_read_nth_seleectable_field(mui_t *ui)
|
||||
|
||||
/* === utility functions for the user API === */
|
||||
|
||||
void mui_send_cursor_msg(mui_t *ui, uint8_t msg)
|
||||
static uint8_t mui_send_cursor_msg(mui_t *ui, uint8_t msg) MUI_NOINLINE;
|
||||
static uint8_t mui_send_cursor_msg(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
if ( ui->cursor_focus_fds )
|
||||
{
|
||||
ui->fds = ui->cursor_focus_fds;
|
||||
if ( mui_prepare_current_field(ui) )
|
||||
muif_get_cb(ui->uif)(ui, msg);
|
||||
return muif_get_cb(ui->uif)(ui, msg);
|
||||
}
|
||||
return 0; /* not called, msg not handled */
|
||||
}
|
||||
|
||||
/* === user API === */
|
||||
@@ -626,7 +656,8 @@ void mui_GetSelectableFieldTextOption(mui_t *ui, uint8_t form_id, uint8_t cursor
|
||||
|
||||
// use the inner_loop procedure, because ui->fds has been assigned already
|
||||
ui->tmp8 = cursor_position; // maybe we should also backup tmp8, but at the moment tmp8 is only used by mui_task_get_current_cursor_focus_position
|
||||
mui_inner_loop_over_form(ui, mui_task_read_nth_seleectable_field);
|
||||
//MUI_DEBUG("mui_GetSelectableFieldTextOption\n");
|
||||
mui_inner_loop_over_form(ui, mui_task_read_nth_selectable_field);
|
||||
// at this point ui->fds contains the field which was selected from above
|
||||
|
||||
// now get the opion string out of the text field. nth_token can be 0 if this is no opion string
|
||||
@@ -637,6 +668,42 @@ void mui_GetSelectableFieldTextOption(mui_t *ui, uint8_t form_id, uint8_t cursor
|
||||
// result is stored in ui->text
|
||||
}
|
||||
|
||||
/*
|
||||
this function will overwrite the ui field related member variables
|
||||
return the number of options in the referenced field
|
||||
*/
|
||||
uint8_t mui_GetSelectableFieldOptionCnt(mui_t *ui, uint8_t form_id, uint8_t cursor_position)
|
||||
{
|
||||
fds_t *fds = ui->fds; // backup the current fds, so that this function can be called inside a task loop
|
||||
int len = ui->len; // backup length of the current command
|
||||
uint8_t cnt = 0;
|
||||
|
||||
ui->fds = mui_find_form(ui, form_id); // search for the target form and overwrite the current fds
|
||||
|
||||
// use the inner_loop procedure, because ui->fds has been assigned already
|
||||
ui->tmp8 = cursor_position; // maybe we should also backup tmp8, but at the moment tmp8 is only used by mui_task_get_current_cursor_focus_position
|
||||
//MUI_DEBUG("mui_GetSelectableFieldOptionCnt\n");
|
||||
mui_inner_loop_over_form(ui, mui_task_read_nth_selectable_field);
|
||||
// at this point ui->fds contains the field which was selected from above
|
||||
|
||||
// now get the opion string out of the text field. nth_token can be 0 if this is no opion string
|
||||
cnt = mui_fds_get_token_cnt(ui);
|
||||
|
||||
ui->fds = fds; // restore the previous fds position
|
||||
ui->len = len;
|
||||
// result is stored in ui->text
|
||||
return cnt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//static void mui_send_cursor_enter_msg(mui_t *ui) MUI_NOINLINE;
|
||||
static void mui_send_cursor_enter_msg(mui_t *ui)
|
||||
{
|
||||
ui->is_mud = 0;
|
||||
mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_ENTER);
|
||||
}
|
||||
|
||||
/*
|
||||
if called from a field function, then the current field variables are destroyed, so that call should be the last call in the field callback.
|
||||
mui_EnterForm is similar to mui_GotoForm and differes only in the second argument (which is the form id instead of the fds pointer)
|
||||
@@ -654,19 +721,22 @@ void mui_EnterForm(mui_t *ui, fds_t *fds, uint8_t initial_cursor_position)
|
||||
ui->current_form_fds = fds;
|
||||
|
||||
/* inform all fields that we start a new form */
|
||||
MUI_DEBUG("mui_EnterForm: form_start\n");
|
||||
mui_loop_over_form(ui, mui_task_form_start);
|
||||
|
||||
/* assign initional cursor focus */
|
||||
MUI_DEBUG("mui_EnterForm: find_first_cursor_uif\n");
|
||||
mui_loop_over_form(ui, mui_task_find_first_cursor_uif);
|
||||
ui->cursor_focus_fds = ui->target_fds; // NULL is ok
|
||||
MUI_DEBUG("mui_EnterForm: find_first_cursor_uif target_fds=%p\n", ui->target_fds);
|
||||
|
||||
while( initial_cursor_position > 0 )
|
||||
{
|
||||
mui_next_field(ui);
|
||||
mui_NextField(ui); // mui_next_field(ui) is not sufficient in case of scrolling
|
||||
initial_cursor_position--;
|
||||
}
|
||||
|
||||
mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_ENTER);
|
||||
mui_send_cursor_enter_msg(ui);
|
||||
}
|
||||
|
||||
/* input: current_form_fds */
|
||||
@@ -682,6 +752,7 @@ void mui_LeaveForm(mui_t *ui)
|
||||
ui->cursor_focus_fds = NULL;
|
||||
|
||||
/* inform all fields that we leave the form */
|
||||
MUI_DEBUG("mui_LeaveForm: form_end\n");
|
||||
mui_loop_over_form(ui, mui_task_form_end);
|
||||
ui->current_form_fds = NULL;
|
||||
}
|
||||
@@ -725,9 +796,11 @@ void mui_RestoreForm(mui_t *ui)
|
||||
*/
|
||||
void mui_NextField(mui_t *ui)
|
||||
{
|
||||
if ( mui_send_cursor_msg(ui, MUIF_MSG_EVENT_NEXT) )
|
||||
return;
|
||||
mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_LEAVE);
|
||||
mui_next_field(ui);
|
||||
mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_ENTER);
|
||||
mui_send_cursor_enter_msg(ui);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -738,6 +811,8 @@ void mui_NextField(mui_t *ui)
|
||||
*/
|
||||
void mui_PrevField(mui_t *ui)
|
||||
{
|
||||
if ( mui_send_cursor_msg(ui, MUIF_MSG_EVENT_PREV) )
|
||||
return;
|
||||
mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_LEAVE);
|
||||
|
||||
mui_loop_over_form(ui, mui_task_find_prev_cursor_uif);
|
||||
@@ -750,7 +825,7 @@ void mui_PrevField(mui_t *ui)
|
||||
ui->cursor_focus_fds = ui->target_fds; // NULL is ok
|
||||
}
|
||||
|
||||
mui_send_cursor_msg(ui, MUIF_MSG_CURSOR_ENTER);
|
||||
mui_send_cursor_enter_msg(ui);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+14
-4
@@ -6,7 +6,7 @@
|
||||
|
||||
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
||||
|
||||
Copyright (c) 2016, olikraus@gmail.com
|
||||
Copyright (c) 2021, olikraus@gmail.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
@@ -151,7 +151,8 @@ struct muif_struct
|
||||
#define MUIF_MSG_CURSOR_LEAVE 6
|
||||
#define MUIF_MSG_TOUCH_DOWN 7
|
||||
#define MUIF_MSG_TOUCH_UP 8
|
||||
|
||||
#define MUIF_MSG_EVENT_NEXT 9
|
||||
#define MUIF_MSG_EVENT_PREV 10
|
||||
|
||||
/* dynamic flags */
|
||||
#define MUIF_DFLAG_IS_CURSOR_FOCUS 0x01
|
||||
@@ -181,9 +182,16 @@ struct mui_struct
|
||||
|
||||
//uint8_t selected_value; // This variable is not used by the user interface but can be used by any field function
|
||||
uint8_t tmp8;
|
||||
|
||||
/* 0: mse, 1: mud */
|
||||
uint8_t is_mud; // a temp variable for the MUIF function to store remember up down mode. This variable will be cleared before sending MUIF_MSG_CURSOR_ENTER
|
||||
/* current field/style variables */
|
||||
//uint8_t cursor_focus_position; // the index of the field which has focus, can be used as last argument for mui_EnterForm
|
||||
|
||||
uint8_t form_scroll_total; // reserved for MUIF, not used by mui
|
||||
uint8_t form_scroll_top; // reserved for MUIF, not used by mui
|
||||
uint8_t form_scroll_visible; // reserved for MUIF, not used by mui
|
||||
|
||||
uint8_t delimiter; // outer delimiter of the text part of a field
|
||||
uint8_t cmd; // current cmd or field (e.g. U or F)
|
||||
uint8_t id0; // identifier of the field, manually provided or derived (G cmd has fixed id "FG")
|
||||
@@ -496,11 +504,13 @@ uint8_t mui_fds_next_token(mui_t *ui) MUI_NOINLINE;
|
||||
uint8_t mui_fds_get_nth_token(mui_t *ui, uint8_t n) MUI_NOINLINE;
|
||||
uint8_t mui_fds_get_token_cnt(mui_t *ui) MUI_NOINLINE;
|
||||
|
||||
|
||||
void mui_Init(mui_t *ui, void *graphics_data, fds_t *fds, muif_t *muif_tlist, size_t muif_tcnt);
|
||||
uint8_t mui_GetCurrentCursorFocusPosition(mui_t *ui);
|
||||
uint8_t mui_GetCurrentCursorFocusPosition(mui_t *ui) ;
|
||||
void mui_Draw(mui_t *ui);
|
||||
/* warning: The next function will overwrite the ui field variables like ui->arg, etc */
|
||||
void mui_GetSelectableFieldTextOption(mui_t *ui, uint8_t form_id, uint8_t cursor_position, uint8_t nth_token);
|
||||
/* warning: The next function will overwrite the ui field variables like ui->arg, etc */
|
||||
uint8_t mui_GetSelectableFieldOptionCnt(mui_t *ui, uint8_t form_id, uint8_t cursor_position);
|
||||
void mui_EnterForm(mui_t *ui, fds_t *fds, uint8_t initial_cursor_position);
|
||||
void mui_LeaveForm(mui_t *ui);
|
||||
uint8_t mui_GotoForm(mui_t *ui, uint8_t form_id, uint8_t initial_cursor_position);
|
||||
|
||||
+389
-60
@@ -6,7 +6,7 @@
|
||||
|
||||
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
||||
|
||||
Copyright (c) 2016, olikraus@gmail.com
|
||||
Copyright (c) 2021, olikraus@gmail.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
@@ -35,6 +35,63 @@
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
field function naming convention
|
||||
|
||||
action
|
||||
draw_text: (rename from draw label)
|
||||
draw_str:
|
||||
btn_jmp button jump to: a button which jumps to a specific form
|
||||
btn_exit button leave: a button which leaves the form and places an exit code into a uint8 variable
|
||||
u8_value_0_9
|
||||
u8_chkbox
|
||||
u8_radio
|
||||
u8_opt_line edit value options in the same line
|
||||
u8_opt_parent edit value options parent
|
||||
u8_opt_child edit value options child
|
||||
|
||||
|
||||
field width (not for draw text/str)
|
||||
wm minimum width
|
||||
wa width can be provided via FDS argument
|
||||
w1 full display width
|
||||
w2 half display size (minus some pixel)
|
||||
w3 one/third of the dispay width (minus some pixel)
|
||||
|
||||
edit mode (not for draw text/str, buttons and checkbox)
|
||||
mse select: select event will increment the value or activate the field (buttons)
|
||||
mud up/down: select will enter the up/down edit mode. Next/prev event will increment/decrement the value
|
||||
|
||||
styles (not for draw text/str)
|
||||
unselected selected up/down edit
|
||||
plain invers invers + gap + frame pi
|
||||
frame invers+frame ? fi
|
||||
|
||||
plain frame invers + frame pf
|
||||
|
||||
mui_u8g2_[action]_[field_width]_[edit_mode]_[style]
|
||||
|
||||
mui _label_u8g2 --> mui_u8g2_draw_text
|
||||
mui _goto_frame_button_invers_select_u8g2 --> mui_u8g2_btn_jmp_wm_fi
|
||||
mui _goto_half_width_frame_button_invers_select_u8g2 --> mui_u8g2_btn_jmp_w2_fi
|
||||
mui _goto_line_button_invers_select_u8g2 --> mui_u8g2_btn_jmp_w1_fi
|
||||
mui _leave_menu_frame_button_invers_select_u8g2 --> mui_u8g2_btn_exit_wm_fi
|
||||
|
||||
mui _input_uint8_invers_select_u8g2 --> mui_u8g2_u8_value_0_9_wm_mse_pi
|
||||
mui _single_line_option_invers_select_u8g2 --> mui_u8g2_u8_opt_line_wa_mse_pi
|
||||
mui _select_options_parent_invers_select_u8g2 --> mui_u8g2_u8_opt_parent_wa_mse_pi
|
||||
mui _select_options_child_invers_select_u8g2 --> mui_u8g2_u8_opt_child_wm_mse_pi
|
||||
|
||||
mui _checkbox_invers_select_u8g2 --> mui_u8g2_u8_chkbox_wm_pi
|
||||
mui _radio_invers_select_u8g2 --> mui_u8g2_u8_radio_wm_pi
|
||||
|
||||
mui _input_char_invers_select_u8g2 --> mui_u8g2_u8_char_wm_mud_pi
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "mui.h"
|
||||
#include "u8g2.h"
|
||||
#include "mui_u8g2.h"
|
||||
@@ -109,6 +166,25 @@ u8g2_t *mui_get_U8g2(mui_t *ui)
|
||||
return (u8g2_t *)(ui->graphics_data);
|
||||
}
|
||||
|
||||
u8g2_uint_t mui_u8g2_get_draw_button_pi_flags(mui_t *ui)
|
||||
{
|
||||
u8g2_uint_t flags = 0;
|
||||
if ( mui_IsCursorFocus(ui) )
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
flags |= U8G2_BTN_XFRAME;
|
||||
}
|
||||
}
|
||||
return flags;
|
||||
}
|
||||
|
||||
//void u8g2_DrawButtonUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text);
|
||||
void mui_u8g2_draw_button_utf(mui_t *ui, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text)
|
||||
{
|
||||
u8g2_DrawButtonUTF8(mui_get_U8g2(ui), mui_get_x(ui), mui_get_y(ui), flags, width, padding_h, padding_v, text);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -140,7 +216,8 @@ uint8_t mui_frame_button_bold_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
flags |= 1;
|
||||
}
|
||||
u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, 1, ui->text);
|
||||
mui_u8g2_draw_button_utf(ui, flags, u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, 1, ui->text);
|
||||
//u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, 1, ui->text);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
@@ -187,7 +264,7 @@ uint8_t mui_frame_button_bold_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
uint8_t mui_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
//u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
u8g2_uint_t flags = U8G2_BTN_HCENTER | 1;
|
||||
switch(msg)
|
||||
{
|
||||
@@ -196,7 +273,8 @@ uint8_t mui_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, 0, 1, 1, ui->text);
|
||||
mui_u8g2_draw_button_utf(ui, flags, 0, 1, 1, ui->text);
|
||||
//u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, 0, 1, 1, ui->text);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
@@ -252,7 +330,8 @@ uint8_t mui_half_width_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, 1, ui->text);
|
||||
mui_u8g2_draw_button_utf(ui, flags, u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, 1, ui->text);
|
||||
// u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, u8g2_GetDisplayWidth(u8g2)/2 - 10, 0, 1, ui->text);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
@@ -298,7 +377,6 @@ uint8_t mui_half_width_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
//u8g2_uint_t flags = U8G2_BTN_HCENTER ;
|
||||
u8g2_uint_t flags = 0;
|
||||
switch(msg)
|
||||
{
|
||||
@@ -307,6 +385,7 @@ uint8_t mui_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
//mui_u8g2_draw_button_utf(ui, flags, u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui) , 0, ui->text);
|
||||
u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, u8g2_GetDisplayWidth(u8g2)-mui_get_x(ui)*2, mui_get_x(ui) , 0, ui->text);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
@@ -352,6 +431,8 @@ uint8_t mui_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
text: Button label (optional, might be taken from previous field)
|
||||
|
||||
*/
|
||||
|
||||
#ifdef OBSOLETE
|
||||
uint8_t mui_radio_mark_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
@@ -366,7 +447,6 @@ uint8_t mui_radio_mark_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
|
||||
{
|
||||
u8g2_uint_t w = 0;
|
||||
u8g2_uint_t a = u8g2_GetAscent(u8g2) - 2;
|
||||
@@ -388,8 +468,7 @@ uint8_t mui_radio_mark_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
u8g2_SetFontMode(u8g2, 1);
|
||||
a += 2; /* add gap between the checkbox and the text area */
|
||||
u8g2_DrawUTF8(u8g2, x+a, y, ui->text);
|
||||
}
|
||||
|
||||
}
|
||||
u8g2_DrawButtonFrame(u8g2, x, y, flags, w+a, 1, 1);
|
||||
}
|
||||
break;
|
||||
@@ -410,8 +489,9 @@ uint8_t mui_radio_mark_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@@ -562,8 +642,6 @@ uint8_t mui_checkbox_mark_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*=========================================================================*/
|
||||
/* ready to use field functions */
|
||||
|
||||
@@ -571,7 +649,7 @@ uint8_t mui_checkbox_mark_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
xy: yes, arg: no, text: yes
|
||||
*/
|
||||
|
||||
uint8_t mui_label_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_draw_text(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
@@ -599,7 +677,7 @@ uint8_t mui_label_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
/*
|
||||
|
||||
uint8_t mui_goto_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_jmp_wm_fi(mui_t *ui, uint8_t msg)
|
||||
|
||||
Description:
|
||||
A button with size equal to button text plus one pixel padding
|
||||
@@ -622,7 +700,7 @@ uint8_t mui_label_u8g2(mui_t *ui, uint8_t msg)
|
||||
text: Button label
|
||||
|
||||
*/
|
||||
uint8_t mui_goto_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_jmp_wm_fi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
@@ -634,7 +712,7 @@ uint8_t mui_goto_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
/*
|
||||
|
||||
uint8_t mui_goto_half_width_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_jmp_w2_fi(mui_t *ui, uint8_t msg)
|
||||
|
||||
Description:
|
||||
A button with size equal to display width / 2 - 10 pixel
|
||||
@@ -657,7 +735,7 @@ uint8_t mui_goto_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
text: Button label
|
||||
|
||||
*/
|
||||
uint8_t mui_goto_half_width_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_jmp_w2_fi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
@@ -669,7 +747,7 @@ uint8_t mui_goto_half_width_frame_button_invers_select_u8g2(mui_t *ui, uint8_t m
|
||||
|
||||
/*
|
||||
|
||||
uint8_t mui_leave_menu_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg)
|
||||
|
||||
Description:
|
||||
A button with size equal to button text plus one pixel padding
|
||||
@@ -694,7 +772,7 @@ uint8_t mui_goto_half_width_frame_button_invers_select_u8g2(mui_t *ui, uint8_t m
|
||||
text: Button label
|
||||
|
||||
*/
|
||||
uint8_t mui_leave_menu_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
@@ -713,7 +791,7 @@ uint8_t mui_leave_menu_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
/*
|
||||
|
||||
uint8_t mui_goto_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_jmp_w1_fi(mui_t *ui, uint8_t msg)
|
||||
|
||||
Description:
|
||||
A full line button (covers complete width of the display).
|
||||
@@ -736,7 +814,7 @@ uint8_t mui_leave_menu_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
*/
|
||||
|
||||
uint8_t mui_goto_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_btn_jmp_w1_fi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
@@ -749,7 +827,7 @@ uint8_t mui_goto_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
/*
|
||||
|
||||
uint8_t mui_input_uint8_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_value_0_9_wm_mse_pi(mui_t *ui, uint8_t msg)
|
||||
|
||||
Description:
|
||||
Select a number between 0 and 9.
|
||||
@@ -773,7 +851,7 @@ uint8_t mui_goto_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
text: not used
|
||||
|
||||
*/
|
||||
uint8_t mui_input_uint8_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_value_0_9_wm_mse_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
//ui->dflags MUIF_DFLAG_IS_CURSOR_FOCUS MUIF_DFLAG_IS_TOUCH_FOCUS
|
||||
//mui_get_cflags(ui->uif) MUIF_CFLAG_IS_CURSOR_SELECTABLE
|
||||
@@ -790,10 +868,9 @@ uint8_t mui_input_uint8_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
if ( mui_IsCursorFocus(ui) )
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
|
||||
u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, u8g2_GetStrWidth(u8g2, "9"), 1, 1, buf);
|
||||
|
||||
}
|
||||
mui_u8g2_draw_button_utf(ui, flags, u8g2_GetStrWidth(u8g2, "9"), 1, 1, buf);
|
||||
//u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, u8g2_GetStrWidth(u8g2, "9"), 1, 1, buf);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
@@ -815,9 +892,150 @@ uint8_t mui_input_uint8_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define MUI_U8G2_VALUE_MAX 100
|
||||
uint8_t mui_u8g2_u8_value_0_100_wm_mud_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
//ui->dflags MUIF_DFLAG_IS_CURSOR_FOCUS MUIF_DFLAG_IS_TOUCH_FOCUS
|
||||
//mui_get_cflags(ui->uif) MUIF_CFLAG_IS_CURSOR_SELECTABLE
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
uint8_t *value = (uint8_t *)muif_get_data(ui->uif);
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
if ( *value > MUI_U8G2_VALUE_MAX )
|
||||
*value = MUI_U8G2_VALUE_MAX;
|
||||
mui_u8g2_draw_button_utf(ui, mui_u8g2_get_draw_button_pi_flags(ui), u8g2_GetStrWidth(u8g2, "999")+1, 1, 1, u8x8_u8toa(*value, 3));
|
||||
//u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), mui_u8g2_get_draw_button_pi_flags(ui), u8g2_GetStrWidth(u8g2, "999")+1, 1, 1, u8x8_u8toa(*value, 3));
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
/* toggle between normal mode and capture next/prev mode */
|
||||
ui->is_mud = !ui->is_mud;
|
||||
/*
|
||||
if ( ui->is_mud )
|
||||
ui->is_mud = 0;
|
||||
else
|
||||
ui->is_mud = 1;
|
||||
*/
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_DOWN:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
case MUIF_MSG_EVENT_NEXT:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
(*value)++;
|
||||
if ( *value > MUI_U8G2_VALUE_MAX )
|
||||
*value = 0;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case MUIF_MSG_EVENT_PREV:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
if ( *value == 0 )
|
||||
*value = MUI_U8G2_VALUE_MAX;
|
||||
else
|
||||
(*value)--;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static uint8_t mui_is_valid_char(uint8_t c) MUI_NOINLINE;
|
||||
uint8_t mui_is_valid_char(uint8_t c)
|
||||
{
|
||||
if ( c == 32 )
|
||||
return 1;
|
||||
if ( c >= 'A' && c <= 'Z' )
|
||||
return 1;
|
||||
if ( c >= 'a' && c <= 'z' )
|
||||
return 1;
|
||||
if ( c >= '0' && c <= '9' )
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint8_t mui_u8g2_u8_char_wm_mud_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
//ui->dflags MUIF_DFLAG_IS_CURSOR_FOCUS MUIF_DFLAG_IS_TOUCH_FOCUS
|
||||
//mui_get_cflags(ui->uif) MUIF_CFLAG_IS_CURSOR_SELECTABLE
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
uint8_t *value = (uint8_t *)muif_get_data(ui->uif);
|
||||
char buf[6];
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
while( mui_is_valid_char(*value) == 0 )
|
||||
(*value)++;
|
||||
buf[0] = *value;
|
||||
buf[1] = '\0';
|
||||
mui_u8g2_draw_button_utf(ui, mui_u8g2_get_draw_button_pi_flags(ui), u8g2_GetMaxCharWidth(u8g2), 1, 1, buf);
|
||||
//u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), mui_u8g2_get_draw_button_pi_flags(ui), u8g2_GetMaxCharWidth(u8g2), 1, 1, buf);
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
/* toggle between normal mode and capture next/prev mode */
|
||||
ui->is_mud = !ui->is_mud;
|
||||
/*
|
||||
if ( ui->is_mud )
|
||||
ui->is_mud = 0;
|
||||
else
|
||||
ui->is_mud = 1;
|
||||
*/
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_DOWN:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
case MUIF_MSG_EVENT_NEXT:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
do {
|
||||
(*value)++;
|
||||
} while( mui_is_valid_char(*value) == 0 );
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case MUIF_MSG_EVENT_PREV:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
do {
|
||||
(*value)--;
|
||||
} while( mui_is_valid_char(*value) == 0 );
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
uint8_t mui_single_line_option_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg)
|
||||
|
||||
Description:
|
||||
Select one of several options. First option has value 0.
|
||||
@@ -840,13 +1058,9 @@ uint8_t mui_input_uint8_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
text: '|' separated list of options
|
||||
|
||||
*/
|
||||
uint8_t mui_single_line_option_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
//ui->dflags MUIF_DFLAG_IS_CURSOR_FOCUS MUIF_DFLAG_IS_TOUCH_FOCUS
|
||||
//mui_get_cflags(ui->uif) MUIF_CFLAG_IS_CURSOR_SELECTABLE
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
u8g2_uint_t flags = 0;
|
||||
//u8g2_uint_t flags = 0;
|
||||
//u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
uint8_t *value = (uint8_t *)muif_get_data(ui->uif);
|
||||
switch(msg)
|
||||
{
|
||||
@@ -856,11 +1070,8 @@ uint8_t mui_single_line_option_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
*value = 0;
|
||||
mui_fds_get_nth_token(ui, *value);
|
||||
}
|
||||
if ( mui_IsCursorFocus(ui) )
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, ui->arg, 1, 1, ui->text);
|
||||
mui_u8g2_draw_button_utf(ui, mui_u8g2_get_draw_button_pi_flags(ui), ui->arg, 1, 1, ui->text);
|
||||
//u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), mui_u8g2_get_draw_button_pi_flags(ui), ui->arg, 1, 1, ui->text);
|
||||
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
@@ -884,15 +1095,70 @@ uint8_t mui_single_line_option_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint8_t mui_select_options_parent_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_opt_line_wa_mud_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
//ui->dflags MUIF_DFLAG_IS_CURSOR_FOCUS MUIF_DFLAG_IS_TOUCH_FOCUS
|
||||
//mui_get_cflags(ui->uif) MUIF_CFLAG_IS_CURSOR_SELECTABLE
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
u8g2_uint_t flags = 0;
|
||||
//u8g2_uint_t flags = 0;
|
||||
//u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
uint8_t *value = (uint8_t *)muif_get_data(ui->uif);
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
if ( mui_fds_get_nth_token(ui, *value) == 0 )
|
||||
{
|
||||
*value = 0;
|
||||
mui_fds_get_nth_token(ui, *value);
|
||||
}
|
||||
mui_u8g2_draw_button_utf(ui, mui_u8g2_get_draw_button_pi_flags(ui), ui->arg, 1, 1, ui->text);
|
||||
//u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), mui_u8g2_get_draw_button_pi_flags(ui), ui->arg, 1, 1, ui->text);
|
||||
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
/* toggle between normal mode and capture next/prev mode */
|
||||
ui->is_mud = !ui->is_mud;
|
||||
/*
|
||||
if ( ui->is_mud )
|
||||
ui->is_mud = 0;
|
||||
else
|
||||
ui->is_mud = 1;
|
||||
*/
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_DOWN:
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
case MUIF_MSG_EVENT_NEXT:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
(*value)++;
|
||||
if ( mui_fds_get_nth_token(ui, *value) == 0 )
|
||||
*value = 0;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case MUIF_MSG_EVENT_PREV:
|
||||
if ( ui->is_mud )
|
||||
{
|
||||
if ( *value == 0 )
|
||||
*value = mui_fds_get_token_cnt(ui);
|
||||
(*value)--;
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
uint8_t mui_u8g2_u8_opt_parent_wa_mse_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
//u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
uint8_t *value = (uint8_t *)muif_get_data(ui->uif);
|
||||
switch(msg)
|
||||
{
|
||||
@@ -902,11 +1168,8 @@ uint8_t mui_select_options_parent_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
*value = 0;
|
||||
mui_fds_get_nth_token(ui, *value);
|
||||
}
|
||||
if ( mui_IsCursorFocus(ui) )
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), flags, 0, 1, 1, ui->text);
|
||||
mui_u8g2_draw_button_utf(ui, mui_u8g2_get_draw_button_pi_flags(ui), 0, 1, 1, ui->text);
|
||||
// u8g2_DrawButtonUTF8(u8g2, mui_get_x(ui), mui_get_y(ui), mui_u8g2_get_draw_button_pi_flags(ui), 0, 1, 1, ui->text);
|
||||
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
@@ -932,7 +1195,7 @@ uint8_t mui_select_options_parent_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
/*
|
||||
|
||||
uint8_t mui_checkbox_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg)
|
||||
|
||||
Description:
|
||||
Checkbox with the values 0 (not selected) and 1 (selected).
|
||||
@@ -954,7 +1217,7 @@ uint8_t mui_select_options_parent_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
|
||||
*/
|
||||
|
||||
uint8_t mui_checkbox_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
//u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
//u8g2_uint_t flags = 0;
|
||||
@@ -985,7 +1248,7 @@ uint8_t mui_checkbox_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
/*
|
||||
radio button style, arg is assigned as value
|
||||
*/
|
||||
uint8_t mui_radio_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_radio_wm_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
uint8_t *value = (uint8_t *)muif_get_data(ui->uif);
|
||||
switch(msg)
|
||||
@@ -1041,23 +1304,60 @@ uint8_t mui_assign_arg_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
}
|
||||
#endif
|
||||
|
||||
uint8_t mui_select_options_child_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
uint8_t mui_u8g2_u8_opt_child_wm_mse_pi(mui_t *ui, uint8_t msg)
|
||||
{
|
||||
u8g2_t *u8g2 = mui_get_U8g2(ui);
|
||||
u8g2_uint_t flags = 0;
|
||||
uint8_t *value = (uint8_t *)muif_get_data(ui->uif);
|
||||
//if ( value == NULL )
|
||||
// value = &(ui->selected_value);
|
||||
uint8_t arg = ui->arg; // remember the arg value, because it might be overwritten
|
||||
|
||||
switch(msg)
|
||||
{
|
||||
case MUIF_MSG_DRAW:
|
||||
return mui_radio_mark_invers_select_u8g2(ui, msg);
|
||||
//return mui_radio_mark_invers_select_u8g2(ui, msg);
|
||||
if ( mui_IsCursorFocus(ui) )
|
||||
{
|
||||
flags |= U8G2_BTN_INV;
|
||||
}
|
||||
{
|
||||
u8g2_uint_t w = 0;
|
||||
u8g2_uint_t a = u8g2_GetAscent(u8g2) - 2;
|
||||
u8g2_uint_t x = mui_get_x(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value
|
||||
u8g2_uint_t y = mui_get_y(ui); // if mui_GetSelectableFieldTextOption is called, then field vars are overwritten, so get the value
|
||||
if ( *value == arg + ui->form_scroll_top )
|
||||
u8g2_DrawValueMark(u8g2, x, y, a);
|
||||
|
||||
if ( ui->text[0] == '\0' )
|
||||
{
|
||||
/* if the text is not provided, then try to get the text from the previous (saved) element, assuming that this contains the selection */
|
||||
/* this will overwrite all ui member functions, so we must not access any ui members (except ui->text) any more */
|
||||
mui_GetSelectableFieldTextOption(ui, ui->last_form_id, ui->last_form_cursor_focus_position, arg + ui->form_scroll_top);
|
||||
}
|
||||
|
||||
if ( ui->text[0] != '\0' )
|
||||
{
|
||||
w = u8g2_GetUTF8Width(u8g2, ui->text);
|
||||
u8g2_SetFontMode(u8g2, 1);
|
||||
a += 2; /* add gap between the checkbox and the text area */
|
||||
u8g2_DrawUTF8(u8g2, x+a, y, ui->text);
|
||||
}
|
||||
u8g2_DrawButtonFrame(u8g2, x, y, flags, w+a, 1, 1);
|
||||
}
|
||||
break;
|
||||
case MUIF_MSG_FORM_START:
|
||||
/* we can assume that the list starts at the top. It will be adjisted by cursor down events later */
|
||||
ui->form_scroll_top = 0;
|
||||
if ( ui->form_scroll_visible <= arg )
|
||||
ui->form_scroll_visible = arg+1;
|
||||
if ( ui->form_scroll_total == 0 )
|
||||
ui->form_scroll_total = mui_GetSelectableFieldOptionCnt(ui, ui->last_form_id, ui->last_form_cursor_focus_position);
|
||||
break;
|
||||
case MUIF_MSG_FORM_END:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_ENTER:
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_SELECT:
|
||||
*value = ui->arg;
|
||||
*value = ui->form_scroll_top + arg;
|
||||
mui_RestoreForm(ui);
|
||||
break;
|
||||
case MUIF_MSG_CURSOR_LEAVE:
|
||||
@@ -1066,6 +1366,35 @@ uint8_t mui_select_options_child_invers_select_u8g2(mui_t *ui, uint8_t msg)
|
||||
break;
|
||||
case MUIF_MSG_TOUCH_UP:
|
||||
break;
|
||||
case MUIF_MSG_EVENT_NEXT:
|
||||
//printf("MUIF_MSG_EVENT_NEXT: arg=%d form_scroll_visible=%d\n", arg, ui->form_scroll_visible);
|
||||
if ( arg+1 == ui->form_scroll_visible )
|
||||
{
|
||||
if ( ui->form_scroll_visible + ui->form_scroll_top < ui->form_scroll_total )
|
||||
{
|
||||
ui->form_scroll_top++;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->form_scroll_top = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MUIF_MSG_EVENT_PREV:
|
||||
if ( arg == 0 )
|
||||
{
|
||||
if ( ui->form_scroll_top > 0 )
|
||||
{
|
||||
ui->form_scroll_top--;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->form_scroll_top = ui->form_scroll_total - ui->form_scroll_visible;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
+23
-12
@@ -6,7 +6,7 @@
|
||||
|
||||
Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
||||
|
||||
Copyright (c) 2016, olikraus@gmail.com
|
||||
Copyright (c) 2021, olikraus@gmail.com
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
@@ -52,6 +52,9 @@ u8g2_uint_t mui_get_x(mui_t *ui);
|
||||
u8g2_uint_t mui_get_y(mui_t *ui);
|
||||
u8g2_t *mui_get_U8g2(mui_t *ui);
|
||||
|
||||
u8g2_uint_t mui_u8g2_get_draw_button_pi_flags(mui_t *ui) MUI_NOINLINE;
|
||||
void mui_u8g2_draw_button_utf(mui_t *ui, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text) MUI_NOINLINE;
|
||||
|
||||
|
||||
/* incomplete field functions */
|
||||
|
||||
@@ -62,18 +65,26 @@ uint8_t mui_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
|
||||
/* ready to use field functions */
|
||||
|
||||
uint8_t mui_label_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_goto_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_goto_half_width_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_leave_menu_frame_button_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_goto_line_button_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_input_uint8_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_single_line_option_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_select_options_parent_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_draw_text(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_btn_jmp_wm_fi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_btn_jmp_w2_fi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_btn_jmp_w1_fi(mui_t *ui, uint8_t msg);
|
||||
|
||||
uint8_t mui_checkbox_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_radio_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_select_options_child_invers_select_u8g2(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_btn_exit_wm_fi(mui_t *ui, uint8_t msg);
|
||||
|
||||
uint8_t mui_u8g2_u8_value_0_9_wm_mse_pi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_u8_value_0_100_wm_mud_pi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_u8_opt_line_wa_mse_pi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_u8_opt_line_wa_mud_pi(mui_t *ui, uint8_t msg);
|
||||
|
||||
uint8_t mui_u8g2_u8_opt_parent_wa_mse_pi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_u8_opt_child_wm_mse_pi(mui_t *ui, uint8_t msg);
|
||||
|
||||
uint8_t mui_u8g2_u8_chkbox_wm_pi(mui_t *ui, uint8_t msg);
|
||||
uint8_t mui_u8g2_u8_radio_wm_pi(mui_t *ui, uint8_t msg);
|
||||
|
||||
|
||||
uint8_t mui_u8g2_u8_char_wm_mud_pi(mui_t *ui, uint8_t msg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1463,6 +1463,9 @@ void u8g2_DrawRFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w,
|
||||
/* horizontal center */
|
||||
#define U8G2_BTN_HCENTER 0x40
|
||||
|
||||
/* second one pixel frame */
|
||||
#define U8G2_BTN_XFRAME 0x80
|
||||
|
||||
void u8g2_DrawButtonFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t text_width, u8g2_uint_t padding_h, u8g2_uint_t padding_v);
|
||||
void u8g2_DrawButtonUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t width, u8g2_uint_t padding_h, u8g2_uint_t padding_v, const char *text);
|
||||
|
||||
|
||||
+23
-1
@@ -84,11 +84,15 @@
|
||||
|
||||
U8G2_BTN_HCENTER 0x40
|
||||
|
||||
U8G2_BTN_XFRAME 0x80
|
||||
|
||||
Total size without shadow: width+2*padding_h+2*border
|
||||
Total size with U8G2_BTN_SHADOW0: width+2*padding_h+3*border
|
||||
Total size with U8G2_BTN_SHADOW1: width+2*padding_h+3*border+1
|
||||
Total size with U8G2_BTN_SHADOW2: width+2*padding_h+3*border+2
|
||||
|
||||
U8G2_BTN_XFRAME:
|
||||
draw another one pixel frame with one pixel gap, will not look good with shadow
|
||||
*/
|
||||
|
||||
void u8g2_DrawButtonFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t flags, u8g2_uint_t text_width, u8g2_uint_t padding_h, u8g2_uint_t padding_v)
|
||||
@@ -97,11 +101,25 @@ void u8g2_DrawButtonFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_
|
||||
|
||||
u8g2_uint_t xx, yy, ww, hh;
|
||||
|
||||
u8g2_uint_t gap_frame = U8G2_BTN_BW_MASK+1;
|
||||
|
||||
u8g2_uint_t border_width = flags & U8G2_BTN_BW_MASK;
|
||||
|
||||
int8_t a = u8g2_GetAscent(u8g2);
|
||||
int8_t d = u8g2_GetDescent(u8g2);
|
||||
|
||||
uint8_t color_backup = u8g2->draw_color;
|
||||
|
||||
|
||||
if ( flags & U8G2_BTN_XFRAME )
|
||||
{
|
||||
border_width++;
|
||||
gap_frame = border_width;
|
||||
border_width++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
for(;;)
|
||||
{
|
||||
|
||||
@@ -118,7 +136,12 @@ void u8g2_DrawButtonFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_
|
||||
hh = a-d+2*padding_v+2*border_width;
|
||||
if ( border_width == 0 )
|
||||
break;
|
||||
if ( border_width == gap_frame )
|
||||
{
|
||||
u8g2_SetDrawColor(u8g2, color_backup == 0 ? 1 : 0);
|
||||
}
|
||||
u8g2_DrawFrame(u8g2, xx, yy, ww, hh);
|
||||
u8g2_SetDrawColor(u8g2, color_backup);
|
||||
|
||||
if ( flags & U8G2_BTN_SHADOW_MASK )
|
||||
{
|
||||
@@ -139,7 +162,6 @@ void u8g2_DrawButtonFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_
|
||||
|
||||
if ( flags & U8G2_BTN_INV )
|
||||
{
|
||||
uint8_t color_backup = u8g2->draw_color;
|
||||
u8g2_SetDrawColor(u8g2, 2); /* XOR */
|
||||
u8g2_DrawBox(u8g2, xx, yy, ww, hh);
|
||||
u8g2_SetDrawColor(u8g2, color_backup);
|
||||
|
||||
Reference in New Issue
Block a user