Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit500043fe9a6c32202c0bde14cac02de85b820c21 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-05-26 11:39:34 +0300
Committer
 Syndamia <kamen@syndamia.com>
2024-05-26 11:39:34 +0300
Filesb3a47fec164ecb6a032b0d93f089e629a50dba15
uni-projects-500043fe9a6c32202c0bde14cac02de85b820c21.tar
uni-projects-500043fe9a6c32202c0bde14cac02de85b820c21.tar.gz
uni-projects-500043fe9a6c32202c0bde14cac02de85b820c21.zip
Parent9bd70c8ed50efb0d84a652bd5a5682627a819cd3 (diff)
[iot/goam] Added printat function and properly implemented line wrapping and not overwriting entire line
2 files changed, 31 insertions, 18 deletions
-rw-r--r--Year 3/Internet of things/goam/main/display.c46
-rw-r--r--Year 3/Internet of things/goam/main/display.h3
diff --git a/Year 3/Internet of things/goam/main/display.c b/Year 3/Internet of things/goam/main/display.c
index 449386f..a8aeb6c 100644
--- a/Year 3/Internet of things/goam/main/display.c
+++ b/Year 3/Internet of things/goam/main/display.c
@@ -1,10 +1,15 @@
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
+#include <string.h>
#include "driver/i2c.h"
#include "display.h"
+unsigned int min(unsigned int a, unsigned int b) {
+ return (a < b) ? a : b;
+}
+
static const char* TAG = "display";
#define LAST_PAGE 7
@@ -63,11 +68,14 @@ static void send(enum DATA_TYPE type, const unsigned char* data, size_t size) {
* Static interface
*/
-unsigned char current_page = 0;
-#define PAGE_INC ((current_page + 1) % (LAST_PAGE + 1))
+static unsigned char start_page = 0;
+#define PAGE_INC ((start_page + 1) % (LAST_PAGE + 1))
+
+static unsigned char start_col = 0;
static void display_output_borders(unsigned char column_start, unsigned char column_end, unsigned char page_start, unsigned char page_end) {
- current_page = page_start;
+ start_col = column_start;
+ start_page = page_start;
unsigned char command[] = { 0x21, column_start, column_end, 0x22, page_start, page_end };
send(CMD_STREAM, command, sizeof(command));
}
@@ -76,10 +84,6 @@ static void display_output_beginning() {
display_output_borders(0, LAST_COL, 0, LAST_PAGE);
}
-static void display_output_newpage() {
- display_output_borders(0, LAST_COL, PAGE_INC, LAST_PAGE);
-}
-
/*
* Public interface
*/
@@ -107,16 +111,15 @@ extern const unsigned bitpixel_char_height;
extern const unsigned bitpixel_char_width;
extern const uint8_t bitpixel_chars[256][16];
-unsigned char out_page_row[LAST_COL + 1];
+static unsigned char out_page_row[LAST_COL + 1];
void display_println(const char* str) {
do {
- int column, character;
+ int column, character = '\0';
for (int linepage = 0; linepage <= 1; linepage++) {
for (column = 0; column <= LAST_COL; column++) {
character = (int)str[column / bitpixel_char_width];
if (character == '\0') {
- column--;
break;
}
// The font currently only has capital letters, this converts lowercase to capital
@@ -128,20 +131,29 @@ void display_println(const char* str) {
}
send(DATA_STREAM, out_page_row, column);
- if (column < sizeof(out_page_row)) {
- display_output_newpage();
+
+ if (character == '\0') {
+ display_output_borders(start_col, LAST_COL, PAGE_INC, LAST_PAGE);
}
- current_page = PAGE_INC;
+ start_page = PAGE_INC;
}
str += column / bitpixel_char_width + (character == '\0');
- } while (*str != '\0' && current_page > 0);
+ } while (*str != '\0' && start_page > 0);
}
-void display_printon(const char* str, unsigned char line) {
+
+void display_printat(const char* str, unsigned char line, unsigned char column) {
if (line < 1) line = 1;
- if (line > 7) line = 7;
- display_output_borders(0, 127, (line - 1) * 2, 7);
+ if (line > 4) line = 4;
+ if (column < 1) column = 1;
+ if (column > 16) column = 16;
+ unsigned char endColumn = min(LAST_COL, (column - 1 + strlen(str)) * bitpixel_char_width - 1);
+ display_output_borders((column - 1) * bitpixel_char_width, endColumn, (line - 1) * 2, LAST_PAGE);
display_println(str);
display_output_beginning();
}
+
+void display_printon(const char* str, unsigned char line) {
+ display_printat(str, line, 1);
+}
diff --git a/Year 3/Internet of things/goam/main/display.h b/Year 3/Internet of things/goam/main/display.h
index 7686a54..a465682 100644
--- a/Year 3/Internet of things/goam/main/display.h
+++ b/Year 3/Internet of things/goam/main/display.h
@@ -10,11 +10,12 @@ void display_invertion(enum Inversion inv_byte);
void display_println(const char* str);
void display_printon(const char* str, unsigned char line);
+void display_printat(const char* str, unsigned char line, unsigned char column);
#define LINE_CLEAR " "
#define CHAR_WIFI "\5"
-#define CHAR_NOWIFI "\7"
+#define CHAR_NO_WIFI "\7"
#define CHAR_WIFI_EXCLAM "\6"
/* Double-width characters */