diff options
| Commit | 500043fe9a6c32202c0bde14cac02de85b820c21 (patch) | |
|---|---|---|
| Author | 2024-05-26 11:39:34 +0300 | |
| Committer | 2024-05-26 11:39:34 +0300 | |
| Files | b3a47fec164ecb6a032b0d93f089e629a50dba15 | |
| uni-projects-500043fe9a6c32202c0bde14cac02de85b820c21.tar uni-projects-500043fe9a6c32202c0bde14cac02de85b820c21.tar.gz uni-projects-500043fe9a6c32202c0bde14cac02de85b820c21.zip | ||
| Parent | 9bd70c8ed50efb0d84a652bd5a5682627a819cd3 (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.c | 46 | ||||
| -rw-r--r-- | Year 3/Internet of things/goam/main/display.h | 3 |
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 */ |
