Draw the character of the ASCII code.

Dependents:   mbed-os_Watson-IoT_ZXing_sample mbed-os_Watson-IoT_ZXing_sample MovPlayer GR-PEACH_HVC-P2_sample_client ... more

Fork of AsciiFont by Daiki Kato

AsciiFont

This is a library to draw the ASCII font characters.

Example

#include "mbed.h"
#include "AsciiFont.h"

#define WIDTH           (12)
#define HEIGHT          (16)
#define BYTE_PER_PIXEL  (1u)
#define STRIDE          (((WIDTH * BYTE_PER_PIXEL) + 7u) & ~7u) //multiple of 8

uint8_t text_field[STRIDE * HEIGHT];

//for debug
void print_text_field() {
    int idx = 0;

    for (int i = 0; i < HEIGHT; i++) {
        for (int j = 0; j < STRIDE; j++) {
            printf("%02x", text_field[idx++]);
        }
        printf("\r\n");
    }
    printf("\r\n");
}

int main() {
    AsciiFont ascii_font(text_field, WIDTH, HEIGHT, STRIDE, BYTE_PER_PIXEL);

    ascii_font.Erase(0xcc);
    ascii_font.DrawStr("AB", 0, 0, 0x11, 1);
    ascii_font.DrawChar('C', AsciiFont::CHAR_PIX_WIDTH,
                        AsciiFont::CHAR_PIX_HEIGHT, 0x22, 1);
    print_text_field(); //debug print

    ascii_font.Erase();
    ascii_font.DrawStr("D", 0, 0, 0xef, 2);
    print_text_field(); //debug print

    ascii_font.Erase(0x11, 6, 0, 6, 8);
    print_text_field(); //debug print
}


API

Import library

Public Member Functions

AsciiFont (uint8_t *p_buf, int width, int height, int stride, int byte_per_pixel, uint32_t const colour=0)
Constructor: Initializes AsciiFont .
void Erase ()
Erase text field.
void Erase (uint32_t const colour)
Erase text field.
void Erase (uint32_t const colour, int x, int y, int width, int height)
Erase text field.
int DrawStr (char *str, int x, int y, uint32_t const colour, int font_size=1, uint16_t const max_char_num=0xffff)
Draw a string.
bool DrawChar (char c, int x, int y, uint32_t const colour, int font_size=1)
Draw a character.

Static Public Attributes

static const int CHAR_PIX_WIDTH = 6
The pixel width of a character.
static const int CHAR_PIX_HEIGHT = 8
The pixel height of a character.

Files at this revision

API Documentation at this revision

Comitter:
dkato
Date:
Tue Sep 27 07:03:20 2016 +0000
Child:
1:fc1b3db025d6
Commit message:
first commit

Changed in this revision

AsciiFont.cpp Show annotated file Show diff for this revision Revisions of this file
AsciiFont.h Show annotated file Show diff for this revision Revisions of this file
ascii.c Show annotated file Show diff for this revision Revisions of this file
ascii.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AsciiFont.cpp	Tue Sep 27 07:03:20 2016 +0000
@@ -0,0 +1,100 @@
+#include "mbed.h"
+#include "AsciiFont.h"
+#include "ascii.h"
+
+#define FONT_WIDTH           6
+#define FONT_HEIGHT          8
+
+AsciiFont::AsciiFont(uint8_t * p_buf, int width, int height, int stride, int byte_per_pixel, uint32_t const colour) : 
+    p_text_field(p_buf), max_width(width), max_height(height), buf_stride(stride), pixel_num(byte_per_pixel), background_colour(colour) {
+    
+}
+
+void AsciiFont::erase() {
+    erase(background_colour, 0, 0, max_width, max_height);
+}
+
+void AsciiFont::erase(uint32_t const colour) {
+    erase(colour, 0, 0, max_width, max_height);
+}
+
+void AsciiFont::erase(uint32_t const colour, int x, int y, int width, int height) {
+    int idx_base;
+    int wk_idx, i, j ,k;
+
+    background_colour = colour;
+    idx_base = (x * pixel_num) + (buf_stride * y);
+    for (i = 0; i < height; i++) {
+        wk_idx = idx_base + (buf_stride * i);
+        for (j = 0; j < width; j++) {
+            for (k = (pixel_num - 1); k >= 0; k--) {
+                p_text_field[wk_idx++] = (uint8_t)(background_colour >> (8 * k));
+            }
+        }
+    }
+}
+
+int AsciiFont::draw_string(char * str, int x, int y, uint32_t const colour, int font_size, uint16_t const max_char_num) {
+    int char_num = 0;
+
+    if ((str == NULL) || (font_size <= 0)) {
+        return 0;
+    }
+    while ((*str != '\0') && (char_num < max_char_num)) {
+        if (draw_char(*str, x, y, colour, font_size) == false) {
+            break;
+        }
+        str++;
+        x += FONT_WIDTH * font_size;
+        char_num++;
+    }
+    return char_num;
+}
+
+bool AsciiFont::draw_char(char c, int x, int y, uint32_t const colour, int font_size) {
+    int idx_base;
+    int idx_y = 0;
+    int wk_idx, i, j ,k, fw, fh;
+    char * p_pattern;
+    uint8_t mask = 0x80;
+    uint32_t wk_colour;
+
+    if (font_size <= 0) {
+        return false;
+    }
+    if ((x + (FONT_WIDTH * font_size)) >= max_width) {
+        return false;
+    }
+    if ((y + (FONT_HEIGHT * font_size)) >= max_height) {
+        return false;
+    }
+
+    if ((c >= 0x20) && (c <= 0x7e)) {
+        p_pattern = (char *)&ASCII_TABLE[c - 0x20][0];
+    } else {
+        p_pattern = (char *)&ASCII_TABLE[10][0]; /* '*' */
+    }
+    idx_base = (x * pixel_num) + (buf_stride * y);
+
+    /* Drawing */
+    for (i = 0; i < FONT_HEIGHT; i++) {
+        for (fh = 0; fh < font_size; fh++) {
+            wk_idx = idx_base + (buf_stride * idx_y);
+            for (j = 0; j < FONT_WIDTH; j++) {
+                if (p_pattern[j] & mask) {
+                    wk_colour = colour;
+                } else {
+                    wk_colour = background_colour;
+                }
+                for (fw = 0; fw < font_size; fw++) {
+                    for (k = (pixel_num - 1); k >= 0; k--) {
+                        p_text_field[wk_idx++] = (uint8_t)(wk_colour >> (8 * k));
+                    }
+                }
+            }
+            idx_y++;
+        }
+        mask = (uint8_t)(mask >> 1);
+    }
+    return true;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AsciiFont.h	Tue Sep 27 07:03:20 2016 +0000
@@ -0,0 +1,79 @@
+/**************************************************************************//**
+* @file          AsciiFont.h
+* @brief         AsciiFont API
+******************************************************************************/
+
+#ifndef ASCII_FONT_H
+#define ASCII_FONT_H
+
+#include "mbed.h"
+
+/** A class to communicate a ascii_font
+ *
+ */
+class AsciiFont {
+public:
+
+    /** Constructor: Initializes AsciiFont.
+     *
+     * @param p_buf Text field address
+     * @param width Text field width
+     * @param height Text field height
+     * @param stride Buffer stride
+     * @param colour Background color
+     * @param byte_per_pixel Byte per pixel
+     */
+    AsciiFont(uint8_t * p_buf, int width, int height, int stride, int byte_per_pixel, uint32_t const colour = 0);
+
+    /** Erase text field
+     *
+     */
+    void erase();
+
+    /** Erase text field
+     *
+     * @param colour Background color
+     */
+    void erase(uint32_t const colour);
+
+    /** Erase text field
+     *
+     * @param colour Background color
+     * @param x Erase start position of x coordinate
+     * @param y Erase start position of y coordinate
+     * @param width Erase field width
+     * @param height Erase field height
+     */
+    void erase(uint32_t const colour, int x, int y, int width, int height);
+
+    /** Draw a string
+     *
+     * @param str String
+     * @param x Drawing start position of x coordinate
+     * @param y Drawing start position of y coordinate
+     * @param color Font color
+     * @param font_size Font size (>=1)
+     * @param max_char_num The maximum number of characters
+     * @return The drawn number of characters
+     */
+    int draw_string(char * str, int x, int y, uint32_t const colour, int font_size = 1, uint16_t const max_char_num = 0xffff);
+
+    /** Draw a character
+     *
+     * @param x Drawing start position of x coordinate
+     * @param y Drawing start position of y coordinate
+     * @param color Font color
+     * @param font_size Font size (>=1)
+     * @return true if successfull
+     */
+    bool draw_char(char c, int x, int y, uint32_t const colour, int font_size = 1);
+
+private:
+    uint8_t * p_text_field;
+    int max_width;
+    int max_height;
+    int buf_stride;
+    int pixel_num;
+    uint32_t background_colour;
+};
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ascii.c	Tue Sep 27 07:03:20 2016 +0000
@@ -0,0 +1,144 @@
+/*******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+*
+*******************************************************************************/
+/* Copyright (C) 2013 Renesas Electronics Corporation. All rights reserved.   */
+/*******************************************************************************
+* File Name     : ascii.c
+* Device(s)     : RZ/A1H RSK+RZA1H
+* H/W Platform  : RSK+RZA1H CPU Board
+* Description   : Defines ascii font table
+*******************************************************************************/
+/*******************************************************************************
+* History       : DD.MM.YYYY Version Description
+*               : 18.06.2013 1.00
+*******************************************************************************/
+/*******************************************************************************
+* User Includes (Project Level Includes)
+*******************************************************************************/
+#include "ascii.h"
+
+/*******************************************************************************
+* Global Tables
+*******************************************************************************/
+#pragma pack(1)
+
+char ASCII_TABLE[][6] =
+{
+  { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},      /* ' '*/
+  { 0x00, 0x00, 0x79, 0x00, 0x00, 0x00},      /* ! */
+  { 0x00, 0x70, 0x00, 0x70, 0x00, 0x00},      /* " */
+  { 0x22, 0x7F, 0x22, 0x7F, 0x22, 0x00},      /* # */
+  { 0x12, 0x2A, 0x7F, 0x2A, 0x24, 0x00},      /* $ */
+  { 0x62, 0x64, 0x08, 0x13, 0x23, 0x00},      /* % */
+  { 0x36, 0x49, 0x55, 0x22, 0x05, 0x00},      /* & */
+  { 0x00, 0x00, 0x60, 0x00, 0x00, 0x00},      /* ' */
+  { 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00},      /* ( */
+  { 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00},      /* ) */
+  { 0x24, 0x18, 0x7E, 0x18, 0x24, 0x00},      /* * */
+  { 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00},      /* + */
+  { 0x00, 0x05, 0x06, 0x00, 0x00, 0x00},      /* , */
+  { 0x08, 0x08, 0x08, 0x08, 0x08, 0x00},      /* - */
+  { 0x00, 0x03, 0x03, 0x00, 0x00, 0x00},      /* . */
+  { 0x02, 0x04, 0x08, 0x10, 0x20, 0x00},      /* / */
+  { 0x3E, 0x45, 0x49, 0x51, 0x3E, 0x00},      /* 0 */
+  { 0x00, 0x21, 0x7F, 0x01, 0x00, 0x00},      /* 1 */
+  { 0x21, 0x43, 0x45, 0x49, 0x71, 0x00},      /* 2 */
+  { 0x42, 0x41, 0x51, 0x69, 0x46, 0x00},      /* 3 */
+  { 0x0C, 0x14, 0x24, 0x7F, 0x04, 0x00},      /* 4 */
+  { 0x72, 0x51, 0x51, 0x51, 0x4E, 0x00},      /* 5 */
+  { 0x1E, 0x29, 0x49, 0x49, 0x06, 0x00},      /* 6 */
+  { 0x40, 0x47, 0x48, 0x50, 0x60, 0x00},      /* 7 */
+  { 0x36, 0x49, 0x49, 0x49, 0x36, 0x00},      /* 8 */
+  { 0x30, 0x49, 0x49, 0x4A, 0x3C, 0x00},      /* 9 */
+  { 0x00, 0x66, 0x66, 0x00, 0x00, 0x00},      /* : */
+  { 0x00, 0x35, 0x36, 0x00, 0x00, 0x00},      /* ; */
+  { 0x08, 0x14, 0x22, 0x41, 0x00, 0x00},      /* < */
+  { 0x14, 0x14, 0x14, 0x14, 0x14, 0x00},      /* = */
+  { 0x00, 0x41, 0x22, 0x14, 0x08, 0x00},      /* > */
+  { 0x20, 0x40, 0x45, 0x48, 0x30, 0x00},      /* ? */
+  { 0x38, 0x45, 0x5D, 0x59, 0x3E, 0x00},      /* @ */
+  { 0x1F, 0x24, 0x44, 0x24, 0x1F, 0x00},      /* A */
+  { 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00},      /* B */
+  { 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00},      /* C */
+  { 0x7F, 0x41, 0x41, 0x22, 0x1C, 0x00},      /* D */
+  { 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00},      /* E */
+  { 0x7F, 0x48, 0x48, 0x48, 0x40, 0x00},      /* F */
+  { 0x3E, 0x41, 0x49, 0x49, 0x2F, 0x00},      /* G */
+  { 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00},      /* H */
+  { 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00},      /* I */
+  { 0x02, 0x01, 0x41, 0x7E, 0x40, 0x00},      /* J */
+  { 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00},      /* K */
+  { 0x7F, 0x01, 0x01, 0x01, 0x01, 0x00},      /* L */
+  { 0x7F, 0x20, 0x18, 0x20, 0x7F, 0x00},      /* M */
+  { 0x7F, 0x10, 0x08, 0x04, 0x7F, 0x00},      /* N */
+  { 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00},      /* O */
+  { 0x7F, 0x48, 0x48, 0x48, 0x30, 0x00},      /* P */
+  { 0x3E, 0x41, 0x45, 0x42, 0x3D, 0x00},      /* Q */
+  { 0x7F, 0x48, 0x4C, 0x4A, 0x31, 0x00},      /* R */
+  { 0x32, 0x49, 0x49, 0x49, 0x26, 0x00},      /* S */
+  { 0x40, 0x40, 0x7F, 0x40, 0x40, 0x00},      /* T */
+  { 0x7E, 0x01, 0x01, 0x01, 0x7E, 0x00},      /* U */
+  { 0x7C, 0x02, 0x01, 0x02, 0x7C, 0x00},      /* V */
+  { 0x7E, 0x01, 0x0E, 0x01, 0x7E, 0x00},      /* W */
+  { 0x63, 0x14, 0x08, 0x14, 0x63, 0x00},      /* X */
+  { 0x70, 0x08, 0x07, 0x08, 0x70, 0x00},      /* Y */
+  { 0x43, 0x45, 0x49, 0x51, 0x61, 0x00},      /* Z */
+  { 0x00, 0x7F, 0x41, 0x00, 0x00, 0x00},      /* [ */
+  { 0x20, 0x10, 0x08, 0x04, 0x02, 0x00},      /* "\" */
+  { 0x00, 0x00, 0x41, 0x7F, 0x00, 0x00},      /* ] */
+  { 0x00, 0x20, 0x40, 0x20, 0x00, 0x00},      /* ^ */
+  { 0x01, 0x01, 0x01, 0x01, 0x01, 0x00},      /* _ */
+  { 0x00, 0x40, 0x20, 0x00, 0x00, 0x00},      /* ' */
+  { 0x02, 0x15, 0x15, 0x0F, 0x01, 0x00},      /* a */
+  { 0x00, 0x7F, 0x11, 0x11, 0x0E, 0x00},      /* b */
+  { 0x00, 0x0E, 0x11, 0x11, 0x11, 0x00},      /* c */
+  { 0x0E, 0x11, 0x11, 0x7F, 0x00, 0x00},      /* d */
+  { 0x0E, 0x15, 0x15, 0x15, 0x0C, 0x00},      /* e */
+  { 0x00, 0x10, 0x3F, 0x50, 0x50, 0x00},      /* f */
+  { 0x08, 0x15, 0x15, 0x15, 0x1E, 0x00},      /* g */
+  { 0x00, 0x7F, 0x10, 0x10, 0x0F, 0x00},      /* h */
+  { 0x00, 0x11, 0x5F, 0x01, 0x00, 0x00},      /* i */
+  { 0x02, 0x01, 0x01, 0x5E, 0x00, 0x00},      /* j */
+  { 0x00, 0x7F, 0x04, 0x0A, 0x11, 0x00},      /* k */
+  { 0x00, 0x41, 0x7F, 0x01, 0x00, 0x00},      /* l */
+  { 0x1F, 0x10, 0x0F, 0x10, 0x0F, 0x00},      /* m */
+  { 0x00, 0x1F, 0x10, 0x10, 0x0F, 0x00},      /* n */
+  { 0x0E, 0x11, 0x11, 0x11, 0x0E, 0x00},      /* 0 */
+  { 0x1F, 0x14, 0x14, 0x14, 0x08, 0x00},      /* p */
+  { 0x08, 0x14, 0x14, 0x14, 0x1F, 0x00},      /* q */
+  { 0x00, 0x1F, 0x08, 0x10, 0x10, 0x00},      /* r */
+  { 0x09, 0x15, 0x15, 0x15, 0x12, 0x00},      /* s */
+  { 0x00, 0x10, 0x7E, 0x11, 0x01, 0x00},      /* t */
+  { 0x00, 0x1E, 0x01, 0x01, 0x1F, 0x00},      /* u */
+  { 0x1C, 0x02, 0x01, 0x02, 0x1C, 0x00},      /* v */
+  { 0x1E, 0x01, 0x06, 0x01, 0x1E, 0x00},      /* w */
+  { 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x00},      /* x */
+  { 0x18, 0x05, 0x05, 0x1E, 0x00, 0x00},      /* y */
+  { 0x11, 0x13, 0x15, 0x19, 0x11, 0x00},      /* z */
+  { 0x00, 0x08, 0x36, 0x41, 0x00, 0x00},      /* { */
+  { 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00},      /* | */
+  { 0x00, 0x41, 0x36, 0x08, 0x00, 0x00},      /* } */
+  { 0x00, 0x20, 0x40, 0x20, 0x40, 0x00}       /* ~ */
+  };
+
+#pragma pack(4)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ascii.h	Tue Sep 27 07:03:20 2016 +0000
@@ -0,0 +1,47 @@
+/******************************************************************************
+* DISCLAIMER
+* This software is supplied by Renesas Electronics Corporation and is only
+* intended for use with Renesas products. No other uses are authorized. This
+* software is owned by Renesas Electronics Corporation and is protected under
+* all applicable laws, including copyright laws.
+* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
+* THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
+* LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
+* AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
+* TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
+* ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
+* FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
+* ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
+* BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+* Renesas reserves the right, without notice, to make changes to this software
+* and to discontinue the availability of this software. By using this software,
+* you agree to the additional terms and conditions found by accessing the
+* following link:
+* http://www.renesas.com/disclaimer
+*
+* Copyright (C) 2013 Renesas Electronics Corporation. All rights reserved.
+******************************************************************************/
+/******************************************************************************
+* File Name    : ascii.h
+* Device(s)    : R7S721001
+* Tool-Chain   : GNUARM-RZv13.01-EABI
+* Description  : This Header file contains the Macro Definitions & prototypes
+*                for the functions used in lcd.c
+*******************************************************************************/
+/*******************************************************************************
+* History       : DD.MM.YYYY Version Description
+*               : 18.06.2013 1.00
+*******************************************************************************/
+
+/* Multiple inclusion prevention macro */
+#ifndef ASCII_H
+#define ASCII_H
+
+/******************************************************************************
+Macro Definitions
+******************************************************************************/
+extern char ASCII_TABLE[][6];
+
+#endif  /* ASCII_H */
+
+