From 5fe1bd709dd18f5e0b4d1574e2586025b61f4868 Mon Sep 17 00:00:00 2001 From: stubbfelnewpc Date: Tue, 9 Jun 2020 23:25:35 +0200 Subject: [PATCH] writer over half --- lib/epd-driver/src/EPD.h | 4 +- lib/epd-driver/src/GUI_Paint.cpp | 66 ++++++++++++++++--------------- lib/epd-driver/src/GUI_Paint.h | 2 + src/TextBlock.cpp | 7 ++-- src/main.cpp | 68 ++++++++++++++++++++++++++++++-- 5 files changed, 107 insertions(+), 40 deletions(-) diff --git a/lib/epd-driver/src/EPD.h b/lib/epd-driver/src/EPD.h index 5084c5f..c09b93b 100644 --- a/lib/epd-driver/src/EPD.h +++ b/lib/epd-driver/src/EPD.h @@ -1,5 +1,5 @@ -#ifndef __utility/EPD_H_ -#define __utility/EPD_H_ +#ifndef __EPD_H_ +#define __EPD_H_ #include "Debug.h" #include "EPD_7in5_V2.h" diff --git a/lib/epd-driver/src/GUI_Paint.cpp b/lib/epd-driver/src/GUI_Paint.cpp index 1bad0b0..1f1cc7c 100644 --- a/lib/epd-driver/src/GUI_Paint.cpp +++ b/lib/epd-driver/src/GUI_Paint.cpp @@ -91,6 +91,8 @@ void Paint_NewImage(UBYTE *image, UWORD Width, UWORD Height, UWORD Rotate, UWORD Paint.WidthMemory = Width; Paint.HeightMemory = Height; + Paint.WidthOffset = 0; + Paint.HeightOffset = 0; Paint.Color = Color; Paint.Scale = 2; Paint.WidthByte = (Width % 8 == 0)? (Width / 8 ): (Width / 8 + 1); @@ -174,8 +176,10 @@ parameter: ******************************************************************************/ void Paint_SetPixel(UWORD Xpoint, UWORD Ypoint, UWORD Color) { + Xpoint = Xpoint < Paint.WidthOffset ? 0xffff : Xpoint - Paint.WidthOffset ; + Ypoint = Ypoint < Paint.HeightOffset ? 0xffff : Ypoint - Paint.HeightOffset; if(Xpoint > Paint.Width || Ypoint > Paint.Height){ - Debug("Exceeding display boundaries\r\n"); + //Debug("Exceeding display boundaries\r\n"); return; } UWORD X, Y; @@ -285,10 +289,10 @@ parameter: void Paint_DrawPoint(UWORD Xpoint, UWORD Ypoint, UWORD Color, DOT_PIXEL Dot_Pixel, DOT_STYLE Dot_Style) { - if (Xpoint > Paint.Width || Ypoint > Paint.Height) { - Debug("Paint_DrawPoint Input exceeds the normal display range\r\n"); - return; - } + // if (Xpoint > Paint.Width || Ypoint > Paint.Height) { + // Debug("Paint_DrawPoint Input exceeds the normal display range\r\n"); + // return; + // } int16_t XDir_Num , YDir_Num; if (Dot_Style == DOT_FILL_AROUND) { @@ -323,11 +327,11 @@ parameter: void Paint_DrawLine(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, LINE_STYLE Line_Style) { - if (Xstart > Paint.Width || Ystart > Paint.Height || - Xend > Paint.Width || Yend > Paint.Height) { - Debug("Paint_DrawLine Input exceeds the normal display range\r\n"); - return; - } + // if (Xstart > Paint.Width || Ystart > Paint.Height || + // Xend > Paint.Width || Yend > Paint.Height) { + // Debug("Paint_DrawLine Input exceeds the normal display range\r\n"); + // return; + // } UWORD Xpoint = Xstart; UWORD Ypoint = Ystart; @@ -381,11 +385,11 @@ parameter: void Paint_DrawRectangle(UWORD Xstart, UWORD Ystart, UWORD Xend, UWORD Yend, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) { - if (Xstart > Paint.Width || Ystart > Paint.Height || - Xend > Paint.Width || Yend > Paint.Height) { - Debug("Input exceeds the normal display range\r\n"); - return; - } + // if (Xstart > Paint.Width || Ystart > Paint.Height || + // Xend > Paint.Width || Yend > Paint.Height) { + // Debug("Input exceeds the normal display range\r\n"); + // return; + // } if (Draw_Fill) { UWORD Ypoint; @@ -414,10 +418,10 @@ parameter: void Paint_DrawCircle(UWORD X_Center, UWORD Y_Center, UWORD Radius, UWORD Color, DOT_PIXEL Line_width, DRAW_FILL Draw_Fill) { - if (X_Center > Paint.Width || Y_Center >= Paint.Height) { - Debug("Paint_DrawCircle Input exceeds the normal display range\r\n"); - return; - } + // if (X_Center > Paint.Width || Y_Center >= Paint.Height) { + // Debug("Paint_DrawCircle Input exceeds the normal display range\r\n"); + // return; + // } //Draw a circle from(0, R) as a starting point int16_t XCurrent, YCurrent; @@ -485,10 +489,10 @@ void Paint_DrawChar(UWORD Xpoint, UWORD Ypoint, const char Acsii_Char, { UWORD Page, Column; - if (Xpoint > Paint.Width || Ypoint > Paint.Height) { - Debug("Paint_DrawChar Input exceeds the normal display range\r\n"); - return; - } + // if (Xpoint > Paint.Width || Ypoint > Paint.Height) { + // Debug("Paint_DrawChar Input exceeds the normal display range\r\n"); + // return; + // } uint32_t Char_Offset = (Acsii_Char - ' ') * Font->Height * (Font->Width / 8 + (Font->Width % 8 ? 1 : 0)); const unsigned char *ptr = &Font->table[Char_Offset]; @@ -535,10 +539,10 @@ void Paint_DrawString_EN(UWORD Xstart, UWORD Ystart, const char * pString, UWORD Xpoint = Xstart; UWORD Ypoint = Ystart; - if (Xstart > Paint.Width || Ystart > Paint.Height) { - Debug("Paint_DrawString_EN Input exceeds the normal display range\r\n"); - return; - } + // if (Xstart > Paint.Width || Ystart > Paint.Height) { + // Debug("Paint_DrawString_EN Input exceeds the normal display range\r\n"); + // return; + // } while (* pString != '\0') { //if X direction filled , reposition to(Xstart,Ypoint),Ypoint is Y direction plus the Height of the character @@ -680,10 +684,10 @@ void Paint_DrawNum(UWORD Xpoint, UWORD Ypoint, int32_t Nummber, uint8_t Str_Array[ARRAY_LEN] = {0}, Num_Array[ARRAY_LEN] = {0}; uint8_t *pStr = Str_Array; - if (Xpoint > Paint.Width || Ypoint > Paint.Height) { - Debug("Paint_DisNum Input exceeds the normal display range\r\n"); - return; - } + // if (Xpoint > Paint.Width || Ypoint > Paint.Height) { + // Debug("Paint_DisNum Input exceeds the normal display range\r\n"); + // return; + // } //Converts a number to a string while (Nummber) { diff --git a/lib/epd-driver/src/GUI_Paint.h b/lib/epd-driver/src/GUI_Paint.h index 8d81f3c..d8ca484 100644 --- a/lib/epd-driver/src/GUI_Paint.h +++ b/lib/epd-driver/src/GUI_Paint.h @@ -83,6 +83,8 @@ typedef struct { UWORD Height; UWORD WidthMemory; UWORD HeightMemory; + UWORD WidthOffset; + UWORD HeightOffset; UWORD Color; UWORD Rotate; UWORD Mirror; diff --git a/src/TextBlock.cpp b/src/TextBlock.cpp index aaeede0..92af27b 100644 --- a/src/TextBlock.cpp +++ b/src/TextBlock.cpp @@ -7,7 +7,7 @@ //namespace myink { namespace ui { PositionalProperties Paint_DrawString(UWORD Xstart, UWORD Ystart, const char * pString, sFONT* Font, UWORD Color_Foreground, UWORD Color_Background); -TextBlock::TextBlock(const char * t, const TextBlockStyleProperties & s): text(t), style(s) +TextBlock::TextBlock(const char * t, const TextBlockStyleProperties & s): style(s), text(t) { } @@ -28,10 +28,11 @@ PositionalProperties Paint_DrawString(UWORD Xstart, UWORD Ystart, const char * p UWORD max_x_pos = Xstart; UWORD max_y_pos = Ystart + Font->Height; UWORD Ypoint = Ystart; - + UWORD max_width = 2*Paint.Width; + while (* pString != '\0') { //if X direction filled , reposition to(Xstart,Ypoint),Ypoint is Y direction plus the Height of the character - if (*pString == '\n'|| (Xpoint + Font->Width ) > Paint.Width ) { + if (*pString == '\n'|| (Xpoint + Font->Width ) > max_width ) { Xpoint = Xstart; Ypoint += Font->Height; if(Ypoint >= max_y_pos) { diff --git a/src/main.cpp b/src/main.cpp index ad395bc..2e00760 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -8,9 +9,24 @@ #include "StackPanel.hpp" #include "TextBlock.hpp" - PAINT_TIME show_time = {2020, 04, 27, 22, 42, 5}; - UBYTE *BlackImage; - sFONT * font = &Font8; + +EspMQTTClient client( + "08151234711-Gast", + "ahVee!M9", + "mqtt.stubbe.rocks", // MQTT Broker server ip + "eeN!ei2eilo1aiT6", // Can be omitted if not needed + "AS5hoh5ug(ei8eer", // Can be omitted if not needed + "minkclient", // Client name that uniquely identify your device + 1883 // The MQTT port, default to 1883. this line can be omitted +); + +UBYTE *BlackImage; +sFONT * font = &Font8; +PositionalProperties current_msg_pos = {0, 0 , 0, 0}; +StackPanelStyleProperties sstyle = {WHITE, 0, BLACK, 0, 1}; +DrawItemCallBack sdraw_items[] ={}; +DrawItemCallBackList sdraw_list = {0, sdraw_items}; +StackPanel cleaner = StackPanel(sstyle, sdraw_list, StackPanel::move_down); PositionalProperties draw_label(const char * title, const char * value, const PositionalProperties & p, const sFONT & f) { @@ -50,10 +66,52 @@ PositionalProperties draw_meeting(const char * date, const char * subject, const return meeting_stack.draw(p); } +void onConnectionEstablished() +{ + // Subscribe to "mytopic/test" and display received message to Serial + client.subscribe("myink/test", [](const String & payload) { + Serial.println(payload); + cleaner.draw(current_msg_pos); + PositionalProperties msg_pos = {0, 300 , 300, 300}; + + Paint_Clear(WHITE); + Paint.WidthOffset = 0; + Paint.HeightOffset = 0; + current_msg_pos = draw_meeting("1", payload.c_str(), "msg", msg_pos, Font12); + EPD_7IN5_V2_SendHalfImage(0, BlackImage); + + Paint_Clear(WHITE); + Paint.WidthOffset = 240; + Paint.HeightOffset = 0; + current_msg_pos = draw_meeting("1", payload.c_str(), "msg", msg_pos, Font12); + EPD_7IN5_V2_SendHalfImage(1, BlackImage); + EPD_7IN5_V2_TurnOnDisplay(); + }); + + // Subscribe to "mytopic/wildcardtest/#" and display received message to Serial + client.subscribe("myink/wildcardtest/#", [](const String & topic, const String & payload) { + Serial.println(topic + ": " + payload); + }); + + // Publish a message to "mytopic/test" + client.publish("myink/test", "This is a message"); // You can activate the retain flag by setting the third parameter to true + + // Execute delayed instructions + client.executeDelayed(5 * 1000, []() { + client.publish("myink/test", "This is a message sent 5 seconds later"); + }); +} + void setup() { // put your setup code here, to run once: DEV_Module_Init(); EPD_7IN5_V2_Init(); + Serial.begin(9600); + // Optionnal functionnalities of EspMQTTClient : + client.enableDebuggingMessages(); // Enable debugging messages sent to serial output + client.enableHTTPWebUpdater(); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overrited with enableHTTPWebUpdater("user", "password"). + client.enableLastWillMessage("TestClient/lastwill", "I am going offline"); // You can activate the retain flag by setting the third parameter to true + /* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */ UWORD Imagesize = ((EPD_7IN5_V2_WIDTH % 8 == 0) ? (EPD_7IN5_V2_WIDTH / 8 ) : (EPD_7IN5_V2_WIDTH / 8 + 1)) * EPD_7IN5_V2_HEIGHT; @@ -74,5 +132,7 @@ void setup() { } void loop() { - EPD_7IN5_V2_Sleep(); + //Serial.println("loop"); + client.loop(); + //EPD_7IN5_V2_Sleep(); }