Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Stefan Haun
firmware
Commits
a9e1b238
Commit
a9e1b238
authored
Oct 05, 2019
by
Rahix
Browse files
Merge 'Draw offscreen lines'
See merge request
card10/firmware!332
parents
d926fa5d
14d5abcc
Changes
6
Hide whitespace changes
Inline
Side-by-side
Documentation/pycardium/display.rst
View file @
a9e1b238
``display`` - Display
=====================
The display module let's you draw on the card10's display.
Pixels are addressed from top left to bottom right with a range of x: 0 to 159 and y: 0 to 79.
.. code-block:: text
0,0
+---------------------+
| |
| |
| |
| |
+---------------------+
159,79
Drawing operations are clipped, pixels outside of the screen will be ignored.
.. automodule:: display
:members:
epicardium/epicardium.h
View file @
a9e1b238
...
...
@@ -1327,8 +1327,8 @@ API(API_DISP_UPDATE, int epic_disp_update());
/**
* Prints a string into the display framebuffer
*
* :param posx: x position to print to.
0 <= x <= 160
* :param posy: y position to print to.
0 <= y <= 80
* :param posx: x position to print to.
* :param posy: y position to print to.
* :param pString: string to print
* :param fg: foreground color in rgb565
* :param bg: background color in rgb565
...
...
@@ -1338,8 +1338,8 @@ API(API_DISP_UPDATE, int epic_disp_update());
*/
API
(
API_DISP_PRINT
,
int
epic_disp_print
(
u
int16_t
posx
,
u
int16_t
posy
,
int16_t
posx
,
int16_t
posy
,
const
char
*
pString
,
uint16_t
fg
,
uint16_t
bg
)
...
...
@@ -1360,8 +1360,8 @@ enum disp_font_name {
* Prints a string into the display framebuffer with font type selectable
*
* :param fontName: number of font, use FontName enum
* :param posx: x position to print to.
0 <= x <= 160
* :param posy: y position to print to.
0 <= y <= 80
* :param posx: x position to print to.
* :param posy: y position to print to.
* :param pString: string to print
* :param fg: foreground color in rgb565
* :param bg: background color in rgb565, no background is drawn if bg==fg
...
...
@@ -1371,8 +1371,8 @@ enum disp_font_name {
*/
API
(
API_DISP_PRINT_ADV
,
int
epic_disp_print_adv
(
uint8_t
font
,
u
int16_t
posx
,
u
int16_t
posy
,
int16_t
posx
,
int16_t
posy
,
const
char
*
pString
,
uint16_t
fg
,
uint16_t
bg
...
...
@@ -1391,24 +1391,24 @@ API(API_DISP_CLEAR, int epic_disp_clear(uint16_t color));
/**
* Draws a pixel on the display
*
* :param x: x position;
0 <= x <= 160
* :param y: y position;
0 <= y <= 80
* :param x: x position;
* :param y: y position;
* :param color: pixel color in rgb565
* :return: ``0`` on success or a negative value in case of an error:
*
* - ``-EBUSY``: Display was already locked from another task.
*/
API
(
API_DISP_PIXEL
,
int
epic_disp_pixel
(
u
int16_t
x
,
u
int16_t
y
,
uint16_t
color
int16_t
x
,
int16_t
y
,
uint16_t
color
));
/**
* Draws a line on the display
*
* :param xstart: x starting position
; 0 <= x <= 160
* :param ystart: y starting position
; 0 <= y <= 80
* :param xend: x ending position
; 0 <= x <= 160
* :param yend: y ending position
; 0 <= y <= 80
* :param xstart: x starting position
* :param ystart: y starting position
* :param xend: x ending position
* :param yend: y ending position
* :param color: line color in rgb565
* :param linestyle: 0 for solid, 1 for dottet (almost no visual difference)
* :param pixelsize: thickness of the line; 1 <= pixelsize <= 8
...
...
@@ -1417,10 +1417,10 @@ API(API_DISP_PIXEL, int epic_disp_pixel(
* - ``-EBUSY``: Display was already locked from another task.
*/
API
(
API_DISP_LINE
,
int
epic_disp_line
(
u
int16_t
xstart
,
u
int16_t
ystart
,
u
int16_t
xend
,
u
int16_t
yend
,
int16_t
xstart
,
int16_t
ystart
,
int16_t
xend
,
int16_t
yend
,
uint16_t
color
,
enum
disp_linestyle
linestyle
,
uint16_t
pixelsize
...
...
@@ -1429,10 +1429,10 @@ API(API_DISP_LINE, int epic_disp_line(
/**
* Draws a rectangle on the display
*
* :param xstart: x coordinate of top left corner
; 0 <= x <= 160
* :param ystart: y coordinate of top left corner
; 0 <= y <= 80
* :param xend: x coordinate of bottom right corner
; 0 <= x <= 160
* :param yend: y coordinate of bottom right corner
; 0 <= y <= 80
* :param xstart: x coordinate of top left corner
* :param ystart: y coordinate of top left corner
* :param xend: x coordinate of bottom right corner
* :param yend: y coordinate of bottom right corner
* :param color: line color in rgb565
* :param fillstyle: 0 for empty, 1 for filled
* :param pixelsize: thickness of the rectangle outline; 1 <= pixelsize <= 8
...
...
@@ -1441,10 +1441,10 @@ API(API_DISP_LINE, int epic_disp_line(
* - ``-EBUSY``: Display was already locked from another task.
*/
API
(
API_DISP_RECT
,
int
epic_disp_rect
(
u
int16_t
xstart
,
u
int16_t
ystart
,
u
int16_t
xend
,
u
int16_t
yend
,
int16_t
xstart
,
int16_t
ystart
,
int16_t
xend
,
int16_t
yend
,
uint16_t
color
,
enum
disp_fillstyle
fillstyle
,
uint16_t
pixelsize
...
...
@@ -1464,8 +1464,8 @@ API(API_DISP_RECT, int epic_disp_rect(
* - ``-EBUSY``: Display was already locked from another task.
*/
API
(
API_DISP_CIRC
,
int
epic_disp_circ
(
u
int16_t
x
,
u
int16_t
y
,
int16_t
x
,
int16_t
y
,
uint16_t
rad
,
uint16_t
color
,
enum
disp_fillstyle
fillstyle
,
...
...
epicardium/modules/display.c
View file @
a9e1b238
...
...
@@ -22,8 +22,8 @@ static int check_lock()
}
int
epic_disp_print
(
u
int16_t
posx
,
u
int16_t
posy
,
int16_t
posx
,
int16_t
posy
,
const
char
*
pString
,
uint16_t
fg
,
uint16_t
bg
...
...
@@ -39,8 +39,8 @@ static const sFONT *font_map[] = {
int
epic_disp_print_adv
(
uint8_t
font
,
u
int16_t
posx
,
u
int16_t
posy
,
int16_t
posx
,
int16_t
posy
,
const
char
*
pString
,
uint16_t
fg
,
uint16_t
bg
...
...
@@ -76,7 +76,7 @@ int epic_disp_clear(uint16_t color)
}
}
int
epic_disp_pixel
(
u
int16_t
x
,
u
int16_t
y
,
uint16_t
color
)
int
epic_disp_pixel
(
int16_t
x
,
int16_t
y
,
uint16_t
color
)
{
int
cl
=
check_lock
();
if
(
cl
<
0
)
{
...
...
@@ -88,10 +88,10 @@ int epic_disp_pixel(uint16_t x, uint16_t y, uint16_t color)
}
int
epic_disp_line
(
u
int16_t
xstart
,
u
int16_t
ystart
,
u
int16_t
xend
,
u
int16_t
yend
,
int16_t
xstart
,
int16_t
ystart
,
int16_t
xend
,
int16_t
yend
,
uint16_t
color
,
enum
disp_linestyle
linestyle
,
uint16_t
pixelsize
...
...
@@ -115,10 +115,10 @@ int epic_disp_line(
}
int
epic_disp_rect
(
u
int16_t
xstart
,
u
int16_t
ystart
,
u
int16_t
xend
,
u
int16_t
yend
,
int16_t
xstart
,
int16_t
ystart
,
int16_t
xend
,
int16_t
yend
,
uint16_t
color
,
enum
disp_fillstyle
fillstyle
,
uint16_t
pixelsize
...
...
@@ -154,8 +154,8 @@ int epic_disp_rect(
}
int
epic_disp_circ
(
u
int16_t
x
,
u
int16_t
y
,
int16_t
x
,
int16_t
y
,
uint16_t
rad
,
uint16_t
color
,
enum
disp_fillstyle
fillstyle
,
...
...
lib/gfx/gfx.c
View file @
a9e1b238
...
...
@@ -95,9 +95,6 @@ void gfx_puts(
x
=
0
;
y
+=
font
->
Height
;
}
// if the line is outside the display we return
if
(
y
>=
r
->
height
)
return
;
// now print the character
gfx_putchar
(
font
,
r
,
x
,
y
,
*
str
,
fg
,
bg
);
...
...
pycardium/modules/py/display.py
View file @
a9e1b238
...
...
@@ -75,8 +75,8 @@ class Display:
:param text: Text to print
:param fg: Foreground color (expects RGB triple)
:param bg: Background color (expects RGB triple) or None for transparent background
:param posx: X-Position of the first character
, 0 <= posx <= 159
:param posy: Y-Position of the first character
, 0 <= posy <= 79
:param posx: X-Position of the first character
:param posy: Y-Position of the first character
:param font: 0 <= font <= 4 (currently) selects a font
Avaiable Fonts:
...
...
@@ -110,8 +110,8 @@ class Display:
"""
Draws a pixel on the display
:param x: X coordinate
, 0<= x <= 159
:param y: Y coordinate
, 0<= y <= 79
:param x: X coordinate
:param y: Y coordinate
:param col: color of the pixel (expects RGB tripple)
"""
...
...
@@ -134,10 +134,10 @@ class Display:
"""
Draws a line on the display.
:param xs: X start coordinate
, 0 <= xs <= 159
:param ys: Y start coordinate
, 0 <= ys <= 79
:param xe: X end coordinate
, 0 <= xe <= 159
:param ye: Y end coordinate
, 0 <= ye <= 79
:param xs: X start coordinate
:param ys: Y start coordinate
:param xe: X end coordinate
:param ye: Y end coordinate
:param col: color of the line (expects RGB triple)
:param dotted: whether the line should be dotted or not
(questionable implementation: draws every other pixel white, draws
...
...
@@ -154,10 +154,10 @@ class Display:
"""
Draws a rectangle on the display.
:param xs: X start coordinate
, 0 <= xs <= 159
:param ys: Y start coordinate
, 0 <= ys <= 79
:param xe: X end coordinate
, 0 <= xe <= 159
:param ye: Y end coordinate
, 0 <= ye <= 79
:param xs: X start coordinate
:param ys: Y start coordinate
:param xe: X end coordinate
:param ye: Y end coordinate
:param col: color of the outline and fill (expects RGB triple)
:param filled: whether the rectangle should be filled or not
:param size: size of the individual pixels, ranges from 1 to 8
...
...
@@ -172,8 +172,8 @@ class Display:
"""
Draws a circle on the display.
:param x: center x coordinate
, 0 <= x <= 159
:param y: center y coordinate
, 0 <= y <= 79
:param x: center x coordinate
:param y: center y coordinate
:param rad: radius
:param col: color of the outline and fill (expects RGB triple)
:param filled: whether the rectangle should be filled or not
...
...
pycardium/modules/sys_display.c
View file @
a9e1b238
...
...
@@ -39,11 +39,11 @@ static mp_obj_t mp_display_print(size_t n_args, const mp_obj_t *args)
mp_raise_TypeError
(
"input text must be a string"
);
}
GET_STR_DATA_LEN
(
args
[
0
],
print
,
print_len
);
u
int32_t
posx
=
mp_obj_get_int
(
args
[
1
]);
u
int32_t
posy
=
mp_obj_get_int
(
args
[
2
]);
uint32_t
fg
=
get_color
(
args
[
3
]);
uint32_t
bg
=
get_color
(
args
[
4
]);
int
res
=
epic_disp_print
(
posx
,
posy
,
(
const
char
*
)
print
,
fg
,
bg
);
int32_t
posx
=
mp_obj_get_int
(
args
[
1
]);
int32_t
posy
=
mp_obj_get_int
(
args
[
2
]);
uint32_t
fg
=
get_color
(
args
[
3
]);
uint32_t
bg
=
get_color
(
args
[
4
]);
int
res
=
epic_disp_print
(
posx
,
posy
,
(
const
char
*
)
print
,
fg
,
bg
);
if
(
res
<
0
)
{
mp_raise_OSError
(
-
res
);
}
...
...
@@ -60,8 +60,8 @@ static mp_obj_t mp_display_print_adv(size_t n_args, const mp_obj_t *args)
mp_raise_TypeError
(
"input text must be a string"
);
}
GET_STR_DATA_LEN
(
args
[
0
],
print
,
print_len
);
u
int32_t
posx
=
mp_obj_get_int
(
args
[
1
]);
u
int32_t
posy
=
mp_obj_get_int
(
args
[
2
]);
int32_t
posx
=
mp_obj_get_int
(
args
[
1
]);
int32_t
posy
=
mp_obj_get_int
(
args
[
2
]);
uint32_t
fg
=
get_color
(
args
[
3
]);
uint32_t
bg
=
get_color
(
args
[
4
]);
uint8_t
fontName
=
mp_obj_get_int
(
args
[
5
]);
...
...
@@ -80,8 +80,8 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
/* draw pixel on the display */
static
mp_obj_t
mp_display_pixel
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
u
int16_t
x
=
mp_obj_get_int
(
args
[
0
]);
u
int16_t
y
=
mp_obj_get_int
(
args
[
1
]);
int16_t
x
=
mp_obj_get_int
(
args
[
0
]);
int16_t
y
=
mp_obj_get_int
(
args
[
1
]);
uint16_t
col
=
get_color
(
args
[
2
]);
//TODO: Move sanity checks to epicardium
...
...
@@ -121,10 +121,10 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
/* draw line on the display */
static
mp_obj_t
mp_display_line
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
u
int16_t
xs
=
mp_obj_get_int
(
args
[
0
]);
u
int16_t
ys
=
mp_obj_get_int
(
args
[
1
]);
u
int16_t
xe
=
mp_obj_get_int
(
args
[
2
]);
u
int16_t
ye
=
mp_obj_get_int
(
args
[
3
]);
int16_t
xs
=
mp_obj_get_int
(
args
[
0
]);
int16_t
ys
=
mp_obj_get_int
(
args
[
1
]);
int16_t
xe
=
mp_obj_get_int
(
args
[
2
]);
int16_t
ye
=
mp_obj_get_int
(
args
[
3
]);
uint16_t
col
=
get_color
(
args
[
4
]);
uint16_t
ls
=
mp_obj_get_int
(
args
[
5
]);
uint16_t
ps
=
mp_obj_get_int
(
args
[
6
]);
...
...
@@ -155,10 +155,10 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
/* draw rectangle on the display */
static
mp_obj_t
mp_display_rect
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
u
int16_t
xs
=
mp_obj_get_int
(
args
[
0
]);
u
int16_t
ys
=
mp_obj_get_int
(
args
[
1
]);
u
int16_t
xe
=
mp_obj_get_int
(
args
[
2
]);
u
int16_t
ye
=
mp_obj_get_int
(
args
[
3
]);
int16_t
xs
=
mp_obj_get_int
(
args
[
0
]);
int16_t
ys
=
mp_obj_get_int
(
args
[
1
]);
int16_t
xe
=
mp_obj_get_int
(
args
[
2
]);
int16_t
ye
=
mp_obj_get_int
(
args
[
3
]);
uint16_t
col
=
get_color
(
args
[
4
]);
uint16_t
fs
=
mp_obj_get_int
(
args
[
5
]);
uint16_t
ps
=
mp_obj_get_int
(
args
[
6
]);
...
...
@@ -189,8 +189,8 @@ static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(
/* draw rectangle on the display */
static
mp_obj_t
mp_display_circ
(
size_t
n_args
,
const
mp_obj_t
*
args
)
{
u
int16_t
x
=
mp_obj_get_int
(
args
[
0
]);
u
int16_t
y
=
mp_obj_get_int
(
args
[
1
]);
int16_t
x
=
mp_obj_get_int
(
args
[
0
]);
int16_t
y
=
mp_obj_get_int
(
args
[
1
]);
uint16_t
rad
=
mp_obj_get_int
(
args
[
2
]);
uint16_t
col
=
get_color
(
args
[
3
]);
uint16_t
fs
=
mp_obj_get_int
(
args
[
4
]);
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment