You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
232 lines
5.8 KiB
232 lines
5.8 KiB
/** @file tinygl.h
|
|
@author M. P. Hayes, UCECE
|
|
@date 24 August 2010
|
|
@brief Tiny graphics library.
|
|
|
|
@defgroup tinygl Tiny graphics library
|
|
|
|
<h3>Introduction to Tinygl</h3>
|
|
|
|
Tinygl is a tiny graphics library for a simple dot matrix
|
|
display. This file declares the data types and graphics
|
|
primitives provided by tinygl. The basic graphics primitive is
|
|
a point. This specifies a pair of (x, y) coordinates on the
|
|
display. Each point has an associated pixel value. Currently,
|
|
this can be 0 for off and 1 for on.
|
|
|
|
|
|
<h3>A simple Tinygl application</h3>
|
|
|
|
Here's a simple application that draws a line from (1, 2) to
|
|
(3, 5). The paced loop runs at 1 kHz and this sets the display
|
|
refresh period to 200 Hz since there are 5 columns.
|
|
|
|
@code
|
|
#include "pacer.h"
|
|
#include "tinygl.h"
|
|
|
|
void main (void)
|
|
{
|
|
pacer_init (1000);
|
|
tinygl_init (1000);
|
|
|
|
tinygl_draw_line (tinygl_point (1, 2), tinygl_point (3, 5));
|
|
|
|
while (1)
|
|
{
|
|
pacer_wait ();
|
|
tinygl_update ();
|
|
}
|
|
}
|
|
@endcode
|
|
|
|
<h3>A Tinygl text application</h3>
|
|
|
|
Here's another simple application that displays a message.
|
|
|
|
@code
|
|
#include "pacer.h"
|
|
#include "tinygl.h"
|
|
#include "../fonts/font5x7_1.h"
|
|
|
|
void main (void)
|
|
{
|
|
pacer_init (1000);
|
|
tinygl_init (1000);
|
|
|
|
tinygl_font_set (&font5x7_1);
|
|
tinygl_text_speed_set (10);
|
|
tinygl_text_mode_set (TINYGL_TEXT_MODE_SCROLL);
|
|
tinygl_text ("HELLO WORLD ");
|
|
|
|
while (1)
|
|
{
|
|
pacer_wait ();
|
|
tinygl_update ();
|
|
}
|
|
}
|
|
@endcode
|
|
|
|
*/
|
|
|
|
#ifndef TINYGL_H
|
|
#define TINYGL_H
|
|
|
|
#include "system.h"
|
|
#include "display.h"
|
|
#include "font.h"
|
|
|
|
/** Define size of display. */
|
|
#define TINYGL_WIDTH DISPLAY_WIDTH
|
|
#define TINYGL_HEIGHT DISPLAY_HEIGHT
|
|
|
|
|
|
/** Maximum length of a message to display. */
|
|
#define TINYGL_MESSAGE_SIZE 32
|
|
|
|
|
|
/** Define a pixel value. Currently the only supported values are 0
|
|
for off and 1 for on. */
|
|
typedef uint8_t tinygl_pixel_value_t;
|
|
|
|
|
|
/** Define a display coordinate. Note these are signed to allow
|
|
relative coordinates. */
|
|
typedef int8_t tinygl_coord_t;
|
|
|
|
|
|
/** Define a point as a pair of coordinates. The display origin is the
|
|
top left corner. */
|
|
typedef struct tinygl_point
|
|
{
|
|
tinygl_coord_t x;
|
|
tinygl_coord_t y;
|
|
} tinygl_point_t;
|
|
|
|
|
|
/** Define text display modes. */
|
|
typedef enum
|
|
{
|
|
/** Stepping text. */
|
|
TINYGL_TEXT_MODE_STEP,
|
|
/** Scrolling text. */
|
|
TINYGL_TEXT_MODE_SCROLL,
|
|
} tinygl_text_mode_t;
|
|
|
|
|
|
/** Define text display directions. */
|
|
typedef enum
|
|
{
|
|
/** Normal text. */
|
|
TINYGL_TEXT_DIR_NORMAL,
|
|
/** Rotated text. */
|
|
TINYGL_TEXT_DIR_ROTATE,
|
|
} tinygl_text_dir_t;
|
|
|
|
|
|
/** Construct a point from a pair of coordinates.
|
|
@param x x coordinate
|
|
@param y y coordinate
|
|
@return point. */
|
|
static inline tinygl_point_t tinygl_point (tinygl_coord_t x, tinygl_coord_t y)
|
|
{
|
|
tinygl_point_t point = {x, y};
|
|
|
|
return point;
|
|
}
|
|
|
|
|
|
/** Set the message update speed.
|
|
@param speed text advance speed (characters per 10 s). */
|
|
void tinygl_text_speed_set (uint8_t speed);
|
|
|
|
|
|
/** Set the message display mode.
|
|
@param mode display mode. */
|
|
void tinygl_text_mode_set (tinygl_text_mode_t mode);
|
|
|
|
|
|
/** Set the message display direction.
|
|
@param dir display direction. */
|
|
void tinygl_text_dir_set (tinygl_text_dir_t dir);
|
|
|
|
|
|
/** Set the font to use for text.
|
|
@param font pointer to font description. */
|
|
void tinygl_font_set (font_t *font);
|
|
|
|
|
|
/** Draw character using current font.
|
|
@param ch character to draw
|
|
@param pos coordinates of top left position
|
|
@return position to draw next character. */
|
|
tinygl_point_t tinygl_draw_char (char ch, tinygl_point_t pos);
|
|
|
|
|
|
/** Draw string (well, as much as possible) using current font.
|
|
@param str string to draw
|
|
@param pos coordinates of top left position
|
|
@return number of whole characters drawn. */
|
|
uint8_t tinygl_draw_string (const char *str, tinygl_point_t pos);
|
|
|
|
|
|
/** Display a message repeatedly.
|
|
@param string null terminated message to display
|
|
@param pos position on screen. */
|
|
void tinygl_draw_message (const char *string, tinygl_point_t pos);
|
|
|
|
|
|
/** Display a message repeatedly.
|
|
@param string null terminated message to display. */
|
|
void tinygl_text (const char *string);
|
|
|
|
|
|
/** Draw point.
|
|
@param pos coordinates of point
|
|
@param pixel_value pixel value to draw point. */
|
|
void tinygl_draw_point (tinygl_point_t pos, tinygl_pixel_value_t pixel_value);
|
|
|
|
|
|
/** Set pixel.
|
|
@param pos coordinates of point
|
|
@param pixel_value pixel value. */
|
|
void tinygl_pixel_set (tinygl_point_t pos, tinygl_pixel_value_t pixel_value);
|
|
|
|
|
|
/** Get pixel.
|
|
@param pos coordinates of point
|
|
@return pixel value. */
|
|
tinygl_pixel_value_t tinygl_pixel_get (tinygl_point_t pos);
|
|
|
|
|
|
/** Draw line.
|
|
@param pos1 coordinates of start of line
|
|
@param pos2 coordinates of end of line
|
|
@param pixel_value pixel value to draw line. */
|
|
void tinygl_draw_line (tinygl_point_t pos1, tinygl_point_t pos2,
|
|
tinygl_pixel_value_t pixel_value);
|
|
|
|
|
|
/** Draw box.
|
|
@param tl coordinates of top left corner of box
|
|
@param br coordinates of bottom right of box
|
|
@param pixel_value pixel value to draw box. */
|
|
void tinygl_draw_box (tinygl_point_t tl, tinygl_point_t br,
|
|
tinygl_pixel_value_t pixel_value);
|
|
|
|
|
|
/** Clear display. */
|
|
void tinygl_clear (void);
|
|
|
|
|
|
/** Update display and advance message. */
|
|
void tinygl_update (void);
|
|
|
|
|
|
/** Initialise things.
|
|
@param rate rate in Hz that tinygl_update called. */
|
|
void tinygl_init (uint16_t rate);
|
|
|
|
|
|
#endif /* TINYGL_H */
|