initial commit, display with commands working

This commit is contained in:
aeroreyna
2026-01-03 20:37:58 -05:00
commit b7e3dde91a
276 changed files with 100087 additions and 0 deletions

178
eink_api.c Normal file
View File

@@ -0,0 +1,178 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "pico/stdlib.h"
// e-Paper library includes
#include "DEV_Config.h"
#include "GUI_Paint.h"
#include "fonts.h"
#include "EPD_4in2_V2.h"
//Create a new image cache
UBYTE *BlackImage;
void process_command(char *cmd);
int epaper_init()
{
printf("EPD_4IN2_V2_test Demo\r\n");
if(DEV_Module_Init()!=0){
return -1;
}
printf("e-Paper Init and Clear...\r\n");
EPD_4IN2_V2_Init();
EPD_4IN2_V2_Clear();
// DEV_Delay_ms(500);
/* you have to edit the startup_stm32fxxx.s file and set a big enough heap size */
UWORD Imagesize = ((EPD_4IN2_V2_WIDTH % 8 == 0)? (EPD_4IN2_V2_WIDTH / 8 ): (EPD_4IN2_V2_WIDTH / 8 + 1)) * EPD_4IN2_V2_HEIGHT;
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
printf("Failed to apply for black memory...\r\n");
return -1;
}
printf("Paint_NewImage\r\n");
Paint_NewImage(BlackImage, EPD_4IN2_V2_WIDTH, EPD_4IN2_V2_HEIGHT, 0, WHITE);
EPD_4IN2_V2_PartialDisplay(BlackImage, 0, 0, EPD_4IN2_V2_WIDTH, EPD_4IN2_V2_HEIGHT);
return 1;
}
int epaper_close()
{
DEV_Delay_ms(1000);
// EPD_4IN2_V2_Init();
// EPD_4IN2_V2_Clear();
printf("Goto Sleep...\r\n");
EPD_4IN2_V2_Sleep();
free(BlackImage);
BlackImage = NULL;
DEV_Delay_ms(2000);//important, at least 2s
return 0;
}
void process_command(char *cmd)
{
printf("Processing command: %s\n", cmd);
if (strcmp(cmd, "init") == 0) {
epaper_init();
printf("e-Paper initialized\n");
} else if (strcmp(cmd, "clear") == 0) {
Paint_Clear(WHITE);
printf("e-Paper cleared\n");
} else if (strcmp(cmd, "display") == 0) {
EPD_4IN2_V2_PartialDisplay(BlackImage, 0, 0, EPD_4IN2_V2_WIDTH, EPD_4IN2_V2_HEIGHT);
printf("Display updated\n");
} else if (strcmp(cmd, "draw_test") == 0) {
Paint_Clear(WHITE);
Paint_DrawString_EN(10, 0, "www.waveshare.com", &Font24, WHITE, BLACK);
Paint_DrawString_EN(10, 35, "Pico-ePaper-4.2", &Font24, BLACK, WHITE);
Paint_DrawString_CN(10, 70, "你好microPython", &Font24CN, WHITE, BLACK);
Paint_DrawString_CN(10, 110, "微雪电子", &Font24CN, BLACK, WHITE);
EPD_4IN2_V2_Display(BlackImage);
printf("Draw test complete\n");
} else if (strncmp(cmd, "draw_text", 9) == 0) {
int x, y;
char text[200];
if (sscanf(cmd, "draw_text %d %d %199[^\n]", &x, &y, text) == 3) {
Paint_DrawString_EN(x, y, text, &Font16, WHITE, BLACK);
printf("Drew text at %d, %d: %s\n", x, y, text);
} else {
printf("Invalid draw_text command format. Use: draw_text x y text\n");
}
} else if (strncmp(cmd, "draw_point", 10) == 0) {
int x, y;
if (sscanf(cmd, "draw_point %d %d", &x, &y) == 2) {
Paint_DrawPoint(x, y, BLACK, DOT_PIXEL_1X1, DOT_STYLE_DFT);
printf("Drew point at %d, %d\n", x, y);
} else {
printf("Invalid draw_point command format. Use: draw_point x y\n");
}
} else if (strncmp(cmd, "draw_line", 9) == 0) {
int x1, y1, x2, y2;
if (sscanf(cmd, "draw_line %d %d %d %d", &x1, &y1, &x2, &y2) == 4) {
Paint_DrawLine(x1, y1, x2, y2, BLACK, DOT_PIXEL_1X1, LINE_STYLE_SOLID);
printf("Drew line from %d,%d to %d,%d\n", x1, y1, x2, y2);
} else {
printf("Invalid draw_line command format. Use: draw_line x1 y1 x2 y2\n");
}
} else if (strncmp(cmd, "draw_rectangle", 14) == 0) {
int x1, y1, x2, y2;
if (sscanf(cmd, "draw_rectangle %d %d %d %d", &x1, &y1, &x2, &y2) == 4) {
Paint_DrawRectangle(x1, y1, x2, y2, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
printf("Drew rectangle from %d,%d to %d,%d\n", x1, y1, x2, y2);
} else {
printf("Invalid draw_rectangle command format. Use: draw_rectangle x1 y1 x2 y2\n");
}
} else if (strncmp(cmd, "draw_circle", 11) == 0) {
int x, y, r;
if (sscanf(cmd, "draw_circle %d %d %d", &x, &y, &r) == 3) {
Paint_DrawCircle(x, y, r, BLACK, DOT_PIXEL_1X1, DRAW_FILL_EMPTY);
printf("Drew circle at %d,%d with radius %d\n", x, y, r);
} else {
printf("Invalid draw_circle command format. Use: draw_circle x y r\n");
}
} else if (strncmp(cmd, "draw_num", 8) == 0) {
int x, y, num;
if (sscanf(cmd, "draw_num %d %d %d", &x, &y, &num) == 3) {
Paint_DrawNum(x, y, num, &Font16, BLACK, WHITE);
printf("Drew number %d at %d,%d\n", num, x, y);
} else {
printf("Invalid draw_num command format. Use: draw_num x y num\n");
}
} else if (strncmp(cmd, "set_pixel", 9) == 0) {
int x, y, color;
if (sscanf(cmd, "set_pixel %d %d %d", &x, &y, &color) == 3) {
Paint_SetPixel(x, y, color);
printf("Set pixel at %d,%d to color %d\n", x, y, color);
} else {
printf("Invalid set_pixel command format. Use: set_pixel x y color\n");
}
} else if (strcmp(cmd, "close") == 0) {
epaper_close();
printf("e-Paper closed\n");
} else {
printf("Unknown command: %s\n", cmd);
}
}
int main()
{
stdio_init_all();
epaper_init();
printf("e-ink api ready\n");
char cmd_buffer[256];
int i = 0;
while (true) {
int c = getchar_timeout_us(0);
if (c != PICO_ERROR_TIMEOUT) {
if (c == '\n' || c == '\r') {
printf("\n");
cmd_buffer[i] = '\0';
process_command(cmd_buffer);
i = 0;
} else if (c == '\b' || c == 127) { // Handle backspace
if (i > 0) {
i--;
printf("\b \b");
}
} else {
if (i < (sizeof(cmd_buffer) - 1)) {
cmd_buffer[i++] = c;
printf("%c", c);
}
}
}
}
epaper_close();
return 0;
}