convert to platformio
This commit is contained in:
89
src/.gitignore
vendored
Normal file
89
src/.gitignore
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
|
||||
# Created by https://www.gitignore.io/api/c,c++,visualstudiocode
|
||||
# Edit at https://www.gitignore.io/?templates=c,c++,visualstudiocode
|
||||
|
||||
### C ###
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Kernel Module Compile Results
|
||||
*.mod*
|
||||
*.cmd
|
||||
.tmp_versions/
|
||||
modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
### C++ ###
|
||||
# Prerequisites
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
|
||||
# Precompiled Headers
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
*.smod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
|
||||
# Executables
|
||||
|
||||
### VisualStudioCode ###
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
|
||||
### VisualStudioCode Patch ###
|
||||
# Ignore all local history of files
|
||||
.history
|
||||
|
||||
# End of https://www.gitignore.io/api/c,c++,visualstudiocode
|
||||
63
src/.vscode/settings.json
vendored
Normal file
63
src/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"files.associations": {
|
||||
"array": "cpp",
|
||||
"atomic": "cpp",
|
||||
"*.tcc": "cpp",
|
||||
"cctype": "cpp",
|
||||
"chrono": "cpp",
|
||||
"clocale": "cpp",
|
||||
"cmath": "cpp",
|
||||
"condition_variable": "cpp",
|
||||
"cstdarg": "cpp",
|
||||
"cstdint": "cpp",
|
||||
"cstdio": "cpp",
|
||||
"cstdlib": "cpp",
|
||||
"cstring": "cpp",
|
||||
"ctime": "cpp",
|
||||
"cwchar": "cpp",
|
||||
"cwctype": "cpp",
|
||||
"deque": "cpp",
|
||||
"list": "cpp",
|
||||
"unordered_map": "cpp",
|
||||
"unordered_set": "cpp",
|
||||
"vector": "cpp",
|
||||
"exception": "cpp",
|
||||
"fstream": "cpp",
|
||||
"functional": "cpp",
|
||||
"initializer_list": "cpp",
|
||||
"iomanip": "cpp",
|
||||
"iosfwd": "cpp",
|
||||
"iostream": "cpp",
|
||||
"istream": "cpp",
|
||||
"limits": "cpp",
|
||||
"mutex": "cpp",
|
||||
"new": "cpp",
|
||||
"ostream": "cpp",
|
||||
"numeric": "cpp",
|
||||
"ratio": "cpp",
|
||||
"sstream": "cpp",
|
||||
"stdexcept": "cpp",
|
||||
"streambuf": "cpp",
|
||||
"system_error": "cpp",
|
||||
"thread": "cpp",
|
||||
"cinttypes": "cpp",
|
||||
"tuple": "cpp",
|
||||
"type_traits": "cpp",
|
||||
"utility": "cpp",
|
||||
"typeinfo": "cpp",
|
||||
"valarray": "cpp",
|
||||
"cstddef": "cpp",
|
||||
"bit": "cpp",
|
||||
"map": "cpp",
|
||||
"set": "cpp",
|
||||
"algorithm": "cpp",
|
||||
"iterator": "cpp",
|
||||
"memory": "cpp",
|
||||
"memory_resource": "cpp",
|
||||
"optional": "cpp",
|
||||
"random": "cpp",
|
||||
"string": "cpp",
|
||||
"string_view": "cpp",
|
||||
"variant": "cpp"
|
||||
}
|
||||
}
|
||||
11
src/Color_t.hpp
Normal file
11
src/Color_t.hpp
Normal file
@@ -0,0 +1,11 @@
|
||||
#ifndef COLOR_T_H
|
||||
#define COLOR_T_H
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
typedef size_t Color;
|
||||
|
||||
|
||||
//}}
|
||||
|
||||
#endif
|
||||
21
src/PositionalProperties_t.hpp
Normal file
21
src/PositionalProperties_t.hpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef POSITIONAL_PROPERTIES_T_H
|
||||
#define POSITIONAL_PROPERTIES_T_H
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
//namespace myink { namespace ui {
|
||||
|
||||
|
||||
typedef struct PositionalProperties_t
|
||||
{
|
||||
size_t left;
|
||||
size_t top;
|
||||
size_t width;
|
||||
size_t height;
|
||||
} PositionalProperties, *PositionalPropertiesPtr;
|
||||
|
||||
|
||||
|
||||
//}}
|
||||
|
||||
#endif
|
||||
102
src/StackPanel.cpp
Normal file
102
src/StackPanel.cpp
Normal file
@@ -0,0 +1,102 @@
|
||||
#include "StackPanel.hpp"
|
||||
#include <functional>
|
||||
#include <GUI_Paint.h>
|
||||
|
||||
//using namespace myink::ui;
|
||||
|
||||
void draw_background(const PositionalProperties & positionals, const Color & background_color);
|
||||
void draw_border(const PositionalProperties positionals, const Color & color, const LineWidth & border_line_width);
|
||||
|
||||
StackPanel::StackPanel(const StackPanelStyleProperties & s, const DrawItemCallBackList & i, const MoveToNextItem & m): style(s), itmes(i), move(m)
|
||||
{
|
||||
}
|
||||
|
||||
StackPanel::~StackPanel()
|
||||
{
|
||||
}
|
||||
|
||||
PositionalProperties StackPanel::draw(const PositionalProperties & positionals) const
|
||||
{
|
||||
auto border_line_width = style.border_line_width;
|
||||
auto margin = style.margin;
|
||||
auto padding = style.padding;
|
||||
auto inner_gap = border_line_width + padding;
|
||||
auto gap = inner_gap + margin;
|
||||
if (itmes.size == 0) {
|
||||
PositionalProperties outer = {
|
||||
positionals.left,
|
||||
positionals.top,
|
||||
positionals.width + 2 * (gap),
|
||||
positionals.height + 2 * (gap)
|
||||
};
|
||||
draw_background(outer, style.background_color);
|
||||
return outer;
|
||||
}
|
||||
|
||||
PositionalProperties inner = {
|
||||
positionals.left + gap,
|
||||
positionals.top + gap,
|
||||
0,
|
||||
0
|
||||
};
|
||||
|
||||
for(auto i = 0; i < itmes.size; i++) {
|
||||
auto & callback = itmes.callbacks[i];
|
||||
auto last = callback(inner);
|
||||
inner = move(inner, last);
|
||||
}
|
||||
|
||||
auto out_distance = 2 * (gap + padding);
|
||||
PositionalProperties outer = {
|
||||
positionals.left,
|
||||
positionals.top,
|
||||
inner.width + out_distance,
|
||||
inner.height + out_distance
|
||||
};
|
||||
|
||||
if (border_line_width < 1)
|
||||
{
|
||||
return outer;
|
||||
}
|
||||
|
||||
PositionalProperties border_positionals = {
|
||||
positionals.left + padding,
|
||||
positionals.top + padding,
|
||||
inner.width + (2 * margin) + border_line_width,
|
||||
inner.height + (2 * margin) + border_line_width
|
||||
};
|
||||
|
||||
draw_border(border_positionals, style.border_line_color, border_line_width);
|
||||
return outer;
|
||||
}
|
||||
|
||||
PositionalProperties StackPanel::move_down(const PositionalProperties & i, const PositionalProperties & p)
|
||||
{
|
||||
return {
|
||||
i.left,
|
||||
i.top + p.height,
|
||||
p.width > i.width ? p.width : i.width,
|
||||
i.height + p.height
|
||||
};
|
||||
}
|
||||
|
||||
PositionalProperties StackPanel::move_right(const PositionalProperties & i, const PositionalProperties & p)
|
||||
{
|
||||
return {
|
||||
i.left + p.width,
|
||||
i.top,
|
||||
i.width + p.width,
|
||||
p.height > i.height ? p.height : i.height
|
||||
};
|
||||
}
|
||||
|
||||
void draw_background(const PositionalProperties & positionals, const Color & background_color)
|
||||
{
|
||||
Paint_ClearWindows(positionals.left, positionals.top, positionals.left + positionals.width, positionals.top + positionals.height, background_color);
|
||||
}
|
||||
|
||||
void draw_border(const PositionalProperties p, const Color & color, const LineWidth & border_line_width)
|
||||
{
|
||||
auto border_line_width_pixel = border_line_width > 8 ? DOT_PIXEL::DOT_PIXEL_8X8 : DOT_PIXEL(border_line_width);
|
||||
Paint_DrawRectangle(p.left, p.top, p.left + p.width, p.top + p.height, color, border_line_width_pixel, DRAW_FILL_EMPTY);
|
||||
}
|
||||
31
src/StackPanel.hpp
Normal file
31
src/StackPanel.hpp
Normal file
@@ -0,0 +1,31 @@
|
||||
#ifndef STACK_PANEL_H
|
||||
#define STACK_PANEL_H
|
||||
|
||||
#include "StackPanel_t.hpp"
|
||||
|
||||
//namespace myink { namespace ui {
|
||||
|
||||
class StackPanel
|
||||
{
|
||||
|
||||
private:
|
||||
const StackPanelStyleProperties & style;
|
||||
const DrawItemCallBackList & itmes;
|
||||
const MoveToNextItem & move;
|
||||
|
||||
public:
|
||||
StackPanel(const StackPanelStyleProperties & style, const DrawItemCallBackList & itmes, const MoveToNextItem & move);
|
||||
~StackPanel();
|
||||
|
||||
PositionalProperties draw(const PositionalProperties & positionals) const;
|
||||
static PositionalProperties move_down(const PositionalProperties & i, const PositionalProperties & p);
|
||||
static PositionalProperties move_right(const PositionalProperties & i, const PositionalProperties & p);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
//}}
|
||||
|
||||
|
||||
#endif
|
||||
37
src/StackPanel_t.hpp
Normal file
37
src/StackPanel_t.hpp
Normal file
@@ -0,0 +1,37 @@
|
||||
#ifndef STACK_PANEL_T_H
|
||||
#define STACK_PANEL_T_H
|
||||
|
||||
#include <cstddef>
|
||||
|
||||
#include "Color_t.hpp"
|
||||
#include "PositionalProperties_t.hpp"
|
||||
#include <functional>
|
||||
|
||||
//namespace myink { namespace ui {
|
||||
class StackPanel;
|
||||
typedef StackPanel * StackPanelPtr;
|
||||
|
||||
typedef size_t LineWidth;
|
||||
typedef size_t Margin;
|
||||
typedef size_t Padding;
|
||||
using DrawItemCallBack = std::function<PositionalProperties(const PositionalProperties &)>;
|
||||
typedef struct DrawItemCallBackList_t
|
||||
{
|
||||
size_t size;
|
||||
DrawItemCallBack * callbacks;
|
||||
} DrawItemCallBackList, *DrawItemCallBackListPtr;
|
||||
|
||||
typedef PositionalProperties (*MoveToNextItem)(const PositionalProperties &, const PositionalProperties & );
|
||||
|
||||
typedef struct StackPanelStyleProperties_t
|
||||
{
|
||||
Color background_color;
|
||||
LineWidth border_line_width;
|
||||
Color border_line_color;
|
||||
Margin margin;
|
||||
Padding padding;
|
||||
} StackPanelStyleProperties, *StackPanelStylePropertiesPtr;
|
||||
|
||||
//}}
|
||||
|
||||
#endif
|
||||
68
src/TextBlock.cpp
Normal file
68
src/TextBlock.cpp
Normal file
@@ -0,0 +1,68 @@
|
||||
#include "TextBlock.hpp"
|
||||
|
||||
#include <string.h>
|
||||
#include <GUI_Paint.h>
|
||||
|
||||
|
||||
//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()
|
||||
{
|
||||
}
|
||||
|
||||
PositionalProperties TextBlock::draw(const PositionalProperties & p)
|
||||
{
|
||||
auto font = style.font;
|
||||
return Paint_DrawString(p.left, p.top, text, &font, style.background_color, style.font_color);
|
||||
}
|
||||
|
||||
PositionalProperties Paint_DrawString(UWORD Xstart, UWORD Ystart, const char * pString,
|
||||
sFONT* Font, UWORD Color_Foreground, UWORD Color_Background)
|
||||
{
|
||||
UWORD Xpoint = Xstart;
|
||||
UWORD max_x_pos = Xstart;
|
||||
UWORD max_y_pos = Ystart + Font->Height;
|
||||
UWORD Ypoint = Ystart;
|
||||
|
||||
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 ) {
|
||||
Xpoint = Xstart;
|
||||
Ypoint += Font->Height;
|
||||
if(Ypoint >= max_y_pos) {
|
||||
max_y_pos = Ypoint + Font->Height;
|
||||
}
|
||||
|
||||
if (*pString == '\n')
|
||||
{
|
||||
pString++;
|
||||
}
|
||||
}
|
||||
|
||||
// If the Y direction is full, reposition to(Xstart, Ystart)
|
||||
if ((Ypoint + Font->Height ) > Paint.Height ) {
|
||||
Xpoint = Xstart;
|
||||
Ypoint = Ystart;
|
||||
}
|
||||
|
||||
Paint_DrawChar(Xpoint, Ypoint, * pString, Font, Color_Background, Color_Foreground);
|
||||
|
||||
//The next character of the address
|
||||
pString ++;
|
||||
|
||||
//The next word of the abscissa increases the font of the broadband
|
||||
Xpoint += Font->Width;
|
||||
if(Xpoint > max_x_pos) {
|
||||
max_x_pos = Xpoint;
|
||||
}
|
||||
}
|
||||
|
||||
return{Xstart, Ystart, max_x_pos - Xstart, (max_y_pos - Ystart)};
|
||||
}
|
||||
|
||||
//}}
|
||||
26
src/TextBlock.hpp
Normal file
26
src/TextBlock.hpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef TEXT_BLOCK_H
|
||||
#define TEXT_BLOCK_H
|
||||
|
||||
#include "TextBlock_t.hpp"
|
||||
|
||||
#include "PositionalProperties_t.hpp"
|
||||
|
||||
//namespace myink { namespace ui {
|
||||
class TextBlock
|
||||
{
|
||||
|
||||
private:
|
||||
const TextBlockStyleProperties & style;
|
||||
const char * text;
|
||||
|
||||
public:
|
||||
TextBlock(const char * text, const TextBlockStyleProperties & style);
|
||||
~TextBlock();
|
||||
|
||||
PositionalProperties draw(const PositionalProperties & pos);
|
||||
};
|
||||
|
||||
//}}
|
||||
|
||||
|
||||
#endif
|
||||
20
src/TextBlock_t.hpp
Normal file
20
src/TextBlock_t.hpp
Normal file
@@ -0,0 +1,20 @@
|
||||
#ifndef TEXT_BLOCK_T_H
|
||||
#define TEXT_BLOCK_T_H
|
||||
|
||||
#include <fonts.h>
|
||||
#include "Color_t.hpp"
|
||||
|
||||
//namespace myink { namespace ui {
|
||||
class TextBlock;
|
||||
typedef TextBlock * TextBlockPtr;
|
||||
|
||||
typedef struct TextBlockStyleProperties_t
|
||||
{
|
||||
Color background_color;
|
||||
Color font_color;
|
||||
const sFONT & font;
|
||||
} TextBlockStyleProperties, *TextBlockStylePropertiesPtr;
|
||||
//}}
|
||||
|
||||
|
||||
#endif
|
||||
78
src/main.cpp
Normal file
78
src/main.cpp
Normal file
@@ -0,0 +1,78 @@
|
||||
#include <Arduino.h>
|
||||
#include <DEV_Config.h>
|
||||
#include <EPD.h>
|
||||
#include <fonts.h>
|
||||
#include <GUI_Paint.h>
|
||||
#include <Debug.h>
|
||||
|
||||
#include "StackPanel.hpp"
|
||||
#include "TextBlock.hpp"
|
||||
|
||||
PAINT_TIME show_time = {2020, 04, 27, 22, 42, 5};
|
||||
UBYTE *BlackImage;
|
||||
sFONT * font = &Font8;
|
||||
|
||||
PositionalProperties draw_label(const char * title, const char * value, const PositionalProperties & p, const sFONT & f)
|
||||
{
|
||||
DrawItemCallBack draw_items[] = {
|
||||
[&f, &title](const PositionalProperties & p) -> PositionalProperties {
|
||||
return TextBlock(title, {WHITE, BLACK, f}).draw(p);
|
||||
},
|
||||
[&value, &f](const PositionalProperties & p) -> PositionalProperties {
|
||||
return TextBlock(value, {WHITE, BLACK, f}).draw(p);
|
||||
},
|
||||
};
|
||||
|
||||
DrawItemCallBackList draw_list = {2, draw_items};
|
||||
StackPanelStyleProperties style = {WHITE, 0, BLACK, 0, 1};
|
||||
auto date_stack = StackPanel(style, draw_list, StackPanel::move_right);
|
||||
return date_stack.draw(p);
|
||||
}
|
||||
|
||||
PositionalProperties draw_meeting(const char * date, const char * subject, const char * location, const PositionalProperties & p, const sFONT & f)
|
||||
{
|
||||
|
||||
DrawItemCallBack meetings_draw_items[] = {
|
||||
[&date, &f](const PositionalProperties & p) -> PositionalProperties {
|
||||
return draw_label("date: ", date, p, f);
|
||||
},
|
||||
[&subject, &f](const PositionalProperties & p) -> PositionalProperties {
|
||||
return draw_label("subject: ", subject, p, f);
|
||||
},
|
||||
[&location, &f](const PositionalProperties & p) -> PositionalProperties {
|
||||
return draw_label("location: ", location, p, f);
|
||||
}
|
||||
};
|
||||
|
||||
DrawItemCallBackList meeting_draw_list = {3, meetings_draw_items};
|
||||
StackPanelStyleProperties meeting_style = {WHITE, 1, BLACK, 1, 2};
|
||||
auto meeting_stack = StackPanel(meeting_style, meeting_draw_list, StackPanel::move_down);
|
||||
return meeting_stack.draw(p);
|
||||
}
|
||||
|
||||
void setup() {
|
||||
// put your setup code here, to run once:
|
||||
DEV_Module_Init();
|
||||
EPD_7IN5_V2_Init();
|
||||
|
||||
/* 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;
|
||||
if ((BlackImage = (UBYTE *)malloc(Imagesize / 2)) == NULL) {
|
||||
printf("Failed to apply for black memory...\r\n");
|
||||
while (1);
|
||||
}
|
||||
|
||||
Paint_NewImage(BlackImage, EPD_7IN5_V2_WIDTH , EPD_7IN5_V2_HEIGHT / 2, 90, WHITE);
|
||||
Paint_SelectImage(BlackImage);
|
||||
Paint_Clear(WHITE);
|
||||
|
||||
draw_meeting("Monday", "boring meeting\nbooring", "home", {0, 0 , 300, 300}, Font12);
|
||||
|
||||
EPD_7IN5_V2_SendHalfImage(0, BlackImage);
|
||||
EPD_7IN5_V2_SendHalfImage(1, BlackImage);
|
||||
EPD_7IN5_V2_TurnOnDisplay();
|
||||
}
|
||||
|
||||
void loop() {
|
||||
EPD_7IN5_V2_Sleep();
|
||||
}
|
||||
Reference in New Issue
Block a user