From 9705273d18f39f99af9851cd0d1eb617d8f870b9 Mon Sep 17 00:00:00 2001 From: Florian Loeffler Date: Tue, 3 May 2022 14:32:44 +0200 Subject: [PATCH] cleaned up modules, dependencies, includes and added font type --- Makefile | 11 +++-- fbdash | Bin 18456 -> 22240 bytes fbdash.c | 106 +++------------------------------------------ fbfont.c | 10 +++++ fbfont.h | 16 +++++++ fbfonts.h | 32 -------------- fblib.c | 51 +++++++++++++++++++++- fblib.h | 10 ++--- fonts/Arial-32px.h | 2 +- 9 files changed, 96 insertions(+), 142 deletions(-) create mode 100644 fbfont.c create mode 100644 fbfont.h delete mode 100644 fbfonts.h diff --git a/Makefile b/Makefile index ab2c8c0..ce1cd4d 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,13 @@ -CFLAGS = -g -Wall -lm +CFLAGS=-g -Wall -lm -fbdash: fbdash.c fblib - gcc fblib.o -o $@ $(CFLAGS) $< +fbdash: fbdash.c fblib.o fbfont.o + gcc fblib.o fbfont.o -o $@ $(CFLAGS) $< fblib: fblib.o gcc -c fblib.c +fbfont: fbfont.o + gcc -c fbfont.c + clean: - rm fbdash fblib.o + rm -f fbdash fblib.o fbfont.o diff --git a/fbdash b/fbdash index fc54444b9569efe7d5dc2ee8d0c73c70a478107b..335495229b4ac428c4572bc9fe3157842674b5cb 100755 GIT binary patch literal 22240 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 kkIW_kWFET?b;NDhA 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 N5&Z%8DpySM{{T=^_sReO diff --git a/fbdash.c b/fbdash.c index bd24f60..a9e61bd 100644 --- a/fbdash.c +++ b/fbdash.c @@ -21,87 +21,18 @@ */ -#include "fblib.h" -#include "fbfonts.h" - #include -#include +#include +#include + +#include "fblib.h" #define WIDTH 240 #define HEIGHT 320 -#define FONTH 8 // 37 -#define FONTW 8 // 22 - - -// 'global' variables to store screen info char *fbp = 0; -/* -struct fb_var_screeninfo vinfo; -struct fb_fix_screeninfo finfo; -*/ - - - -void render_string(char *fbp, char* font, char *text, int x, int y, int r, int g, int b) -{ - int text_length = strlen(text); - printf("text_length = %d\n", text_length); - - int bytes_per_line = ceil(FONTW / 8.0); - printf("bytes_per_line = %d\n", bytes_per_line); - - int char_offset = bytes_per_line * FONTH; - - // each character - for (int char_pos = 0; char_pos < text_length; char_pos++) { - //int char_code = 0; - int char_code = *(text + char_pos); - int x_offset = char_pos * FONTW + x; - - // each line of pixels - for (int line = 0; line < FONTH; line++) { - int y_pos = line + y; - - // each byte in a line of pixels - for (int byte_num = 0; byte_num < bytes_per_line; byte_num++) { - int byte_offset = line * bytes_per_line + byte_num; - char current_byte = *((font + char_code * char_offset) + byte_offset); - - // each bit/pixel in a byte - for (int bit_number = 0; bit_number < 8; bit_number++) { - char mask = 1 << bit_number; - if(current_byte & mask) { - // plot the pixel - printf("x"); - - int x_pos = x_offset + byte_num * 8 + bit_number; - put_pixel(fbp, x_pos, y_pos, 255, 255, 255); - } - else { - // leave empty (or maybe plot 'text backgr color') - printf(" "); - } - } // end "for bit_number" - - } // end "for byte_num" - - printf("\n"); - - } // end "for line" - - } // end "for char_pos" -} - - - - - -// helper function for drawing - no more need to go mess with -// the main function when just want to change what to draw... void draw() { - clear_screen(fbp); // horizontal spacersint x_space = 10; @@ -123,17 +54,15 @@ void draw() { - char *text = "Hello world!"; - //render_string(fbp, (char*)arial_16x16, text, 0, 0, 255, 255, 255); - render_string(fbp, (char*)font8x8_basic, text, 0, 0, 255, 255, 255); + char *text = "Hello!"; + //render_string(fbp, arial_32, text, 0, 0, 255, 255, 255); + render_string(fbp, basic_8, text, 0, 0, 255, 255, 255); } // application entry point int main(int argc, char* argv[]) { - int fbfd = 0; - //struct fb_var_screeninfo orig_vinfo; long int screensize = 0; // Open the framebuffer file for reading and writing @@ -144,25 +73,7 @@ int main(int argc, char* argv[]) } printf("The framebuffer device was opened successfully.\n"); - - /* - // Get variable screen information - if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) { - printf("Error reading variable information.\n"); - } - printf("Variable info: %dx%d, %dbpp\n", - vinfo.xres, vinfo.yres, - vinfo.bits_per_pixel ); - - // Get fixed screen information - if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) { - printf("Error reading fixed information.\n"); - } - printf("Fixed info: smem_len %d, line_length %d\n", finfo.smem_len, finfo.line_length); -*/ - // map fb to user mem - //screensize = finfo.smem_len; screensize = WIDTH*HEIGHT*2; fbp = (char*)mmap(0, screensize, @@ -181,11 +92,8 @@ int main(int argc, char* argv[]) // cleanup //clear_screen(fbp); - // unmap fb file from memory munmap(fbp, screensize); - // close fb file close(fbfd); return 0; - } diff --git a/fbfont.c b/fbfont.c new file mode 100644 index 0000000..9b64c0f --- /dev/null +++ b/fbfont.c @@ -0,0 +1,10 @@ + +#include "fbfont.h" + +#include "fonts/dhepper-font8x8/font8x8_basic.h" +#include "fonts/Arial-32px.h" + + +fbfont arial_32 = { 22, 37, (char*)xbm_arial_32 }; +fbfont basic_8 = { 8, 8, (char*)font8x8_basic }; + diff --git a/fbfont.h b/fbfont.h new file mode 100644 index 0000000..7b07688 --- /dev/null +++ b/fbfont.h @@ -0,0 +1,16 @@ + +#ifndef FBFONTS_H +#define FBFONTS_H + +struct s_fbfont { + unsigned char width; + unsigned char height; + char *xbm; +}; + +typedef struct s_fbfont fbfont; + +extern fbfont arial_32; +extern fbfont basic_8; + +#endif diff --git a/fbfonts.h b/fbfonts.h deleted file mode 100644 index d46844e..0000000 --- a/fbfonts.h +++ /dev/null @@ -1,32 +0,0 @@ -/** - * fbdash.c - * - * Adapted by Florian Klemenz for use in the fb_dash project - * - * Source and all credit goes to - * https://github.com/dhepper/font8x8 - * -------------------------------------------------------------------------------------------- - * - * 8x8 monochrome bitmap fonts for rendering - * Author: Daniel Hepper - * - * License: Public Domain - * - * Based on: - * // Summary: font8x8.h - * // 8x8 monochrome bitmap fonts for rendering - * // - * // Author: - * // Marcel Sondaar - * // International Business Machines (public domain VGA fonts) - * // - * // License: - * // Public Domain - * - * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm - **/ - - -#include "fonts/dhepper-font8x8/font8x8_basic.h" -//#include "fonts/vento-xbm-fonts/ascii_16x26.h" -#include "fonts/arial-16x16.h" diff --git a/fblib.c b/fblib.c index 43bd98a..8210f02 100644 --- a/fblib.c +++ b/fblib.c @@ -19,7 +19,6 @@ #include "fblib.h" - // helper function to 'plot' a pixel in given color void put_pixel(char *fbp, int x, int y, int r, int g, int b) { @@ -166,3 +165,53 @@ void draw_line(char *fbp, int x0, int y0, int x1, int y1, int r, int g, int b) { } } } + +void render_string(char *fbp, fbfont font, char *text, int x, int y, int r, int g, int b) +{ + int text_length = strlen(text); + printf("text_length = %d\n", text_length); + + int bytes_per_line = ceil(font.width / 8.0); + printf("bytes_per_line = %d\n", bytes_per_line); + + int char_offset = bytes_per_line * font.height; + + // each character + for (int char_pos = 0; char_pos < text_length; char_pos++) { + //int char_code = 0; + int char_code = *(text + char_pos); + int x_offset = char_pos * font.width + x; + + // each line of pixels + for (int line = 0; line < font.height; line++) { + int y_pos = line + y; + + // each byte in a line of pixels + for (int byte_num = 0; byte_num < bytes_per_line; byte_num++) { + int byte_offset = line * bytes_per_line + byte_num; + char current_byte = *((font.xbm + char_code * char_offset) + byte_offset); + + // each bit/pixel in a byte + for (int bit_number = 0; bit_number < 8; bit_number++) { + char mask = 1 << bit_number; + if(current_byte & mask) { + // plot the pixel + printf("x"); + + int x_pos = x_offset + byte_num * 8 + bit_number; + put_pixel(fbp, x_pos, y_pos, 255, 255, 255); + } + else { + // leave empty (or maybe plot 'text backgr color') + printf(" "); + } + } // end "for bit_number" + + } // end "for byte_num" + + printf("\n"); + + } // end "for line" + + } // end "for char_pos" +} diff --git a/fblib.h b/fblib.h index 07ffbf1..306bb06 100644 --- a/fblib.h +++ b/fblib.h @@ -23,17 +23,15 @@ #include #include -#include #include -#include -#include -#include -#include +#include +#include "fbfont.h" #define WIDTH 240 #define HEIGHT 320 + void put_pixel(char *fbp, int x, int y, int r, int g, int b); void clear_screen(char *fbp); @@ -45,4 +43,6 @@ void fill_rect(char *fbp, int x, int y, int w, int h, int r, int g, int b); void draw_circle(char *fbp, int x0, int y0, int radius, int r, int g, int b); void fill_circle(char *fbp, int x0, int y0, int radius, int r, int g, int b); +void render_string(char *fbp, fbfont font, char *text, int x, int y, int r, int g, int b); + #endif diff --git a/fonts/Arial-32px.h b/fonts/Arial-32px.h index a76f656..cb37421 100644 --- a/fonts/Arial-32px.h +++ b/fonts/Arial-32px.h @@ -1,7 +1,7 @@ #define A_width 22 #define A_height 37 -static char arial_32[1][111] = { +static char xbm_arial_32[1][111] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x3E, 0x00,