writer over half

This commit is contained in:
stubbfelnewpc
2020-06-09 23:25:35 +02:00
parent 7a7c1a224f
commit 5fe1bd709d
5 changed files with 107 additions and 40 deletions

View File

@@ -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"

View File

@@ -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) {

View File

@@ -83,6 +83,8 @@ typedef struct {
UWORD Height;
UWORD WidthMemory;
UWORD HeightMemory;
UWORD WidthOffset;
UWORD HeightOffset;
UWORD Color;
UWORD Rotate;
UWORD Mirror;

View File

@@ -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) {

View File

@@ -1,5 +1,6 @@
#include <Arduino.h>
#include <DEV_Config.h>
#include <EspMQTTClient.h>
#include <EPD.h>
#include <fonts.h>
#include <GUI_Paint.h>
@@ -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();
}